Ich habe ein Projekt in Pycharm wie folgt organisiert:
-- Sources
|--__init__.py
|--Calculators
|--__init__.py
|--Filters.py
|--Controllers
|--__init__.py
|--FiltersController.py
|--Viewers
|--__init__.py
|--DataVisualization.py
|--Models
|--__init__.py
|--Data
Alle meine __init__.py, mit Ausnahme der oben genannten Quellen, sind leere Dateien. Ich erhalte viele Warnungen dieser Art:
Die Referenz 'xxx' in __init__.py kann nicht gefunden werden
Zum Beispiel hat meine FiltersController .py diesen Code:
import numpy.random as npr
bootstrap = npr.choice(image_base.data[max(0, x-2):x+3, max(0, y-2):y+3].flatten(), size=(3, 3), replace=True)
Und ich bekomme diese Warnung:
Die Referenz 'Auswahl' kann in __init__.py nicht gefunden werden
Ich google und frage mich, was das bedeutet und was ich tun soll, um in Python richtig zu codieren.
Danke im Voraus.
python
reference
coding-style
pycharm
Pceccon
quelle
quelle
Antworten:
Dies ist ein Fehler in Pycharm. PyCharm scheint zu erwarten, dass das referenzierte Modul in einer
__all__ = []
Anweisung enthalten ist.Sollten Sie für eine ordnungsgemäße Codierungsetikette die
__all__
Aussage Ihrer Module einschließen ? ..das ist eigentlich die Frage, die der junge Spock während des Tests beantworten hört, auf die er antwortete: "Es ist moralisch lobenswert, aber moralisch nicht obligatorisch."Um dies zu umgehen, können Sie diese
(äußerst unkritische)(äußerst nützliche) Überprüfung einfach global deaktivieren oder für die jeweilige Funktion oder Anweisung unterdrücken.Um dies zu tun:
PyCharm hat seinen Anteil an kleinen Fehlern wie diesen, aber meiner Meinung nach überwiegen seine Vorteile bei weitem die Nachteile. Wenn Sie eine andere gute IDE ausprobieren möchten, gibt es auch Spyder / Spyderlib.
Ich weiß, dass dies ziemlich lange dauert, nachdem Sie Ihre Frage gestellt haben, aber ich hoffe, dass dies hilft (Sie oder jemand anderes).
Bearbeitet: Ursprünglich dachte ich, dass dies spezifisch für die Überprüfung ist
__all__
, aber es sieht so aus, als ob es sich um die allgemeinere Überprüfung "Ungelöste Referenzen" handelt, die sehr nützlich sein kann. Es ist wahrscheinlich am besten, die Funktion auf Anweisungsebene zu deaktivieren, indem Sie entweder das oben erwähnte Menü verwenden oder# noinspection PyUnresolvedReferences
in der Zeile vor der Anweisung angeben.quelle
Sie sollten zuerst einen Blick auf nehmen diese . Dies erklärt, was passiert, wenn Sie ein Paket importieren. Zur Bequemlichkeit:
PyCharm respektiert dies, indem es eine Warnmeldung anzeigt, damit der Autor entscheiden kann, welches der Module importiert wird, wenn * aus dem Paket importiert wird. Daher scheint dies eine nützliche Funktion von PyCharm zu sein (und ich nehme an, es kann in keiner Weise als Fehler bezeichnet werden). Sie können diese Warnung einfach entfernen, indem Sie die Namen der Module hinzufügen, die importiert werden sollen, wenn Ihr Paket in die folgende
__all__
Variable importiert wird__init__.py
from . import MyModule1, MyModule2, MyModule3 __all__ = [MyModule1, MyModule2, MyModule3]
Nachdem Sie dies hinzugefügt haben, können Sie
ctrl+click
auf diesen Modulnamen, die in einem anderen Teil Ihres Projekts verwendet werden, direkt zur Deklaration springen, was ich oft sehr nützlich finde.quelle
__init__.py
Datei, um zu dem Modul zurückzukehren, in dem sich eine Funktion / Variable befindet. Ohne__all__
die Modulnamen kann es also nicht zur Quelle zurückverfolgt werden. Dies ist meine Annahme, ich kann mich irren.Ich weiß, dass dies alt ist, aber Google hat mich hierher geschickt, damit ich denke, dass andere auch so wie ich kommen werden.
Die Antwort für 2018 ist die hier ausgewählte: Pycharm: Fehler "ungelöste Referenz" in der IDE beim Öffnen eines Arbeitsprojekts
Beachten Sie jedoch, dass Sie nur einen hinzufügen können,
Content Root
aber Sie können mehrere hinzufügenSource Folders
. Sie müssen keine__init__.py
Dateien berühren .quelle
Sie können das Quellverzeichnis wie folgt als Quellstamm markieren:
quelle
Stellen Sie sicher, dass Sie den Dateityp der
__init__.py
Dateien nicht versehentlich geändert haben . Wenn Sie beispielsweise den Typ in "Text" (anstelle von "Python") geändert haben, analysiert PyCharm die Datei nicht auf Python-Code. In diesem Fall stellen Sie möglicherweise fest, dass sich das Dateisymbol für__init__.py
Dateien von anderen Python-Dateien unterscheidet.Um dies zu beheben,
Settings > Editor > File Types
klicken Sie in der Liste "Erkannte Dateitypen" auf "Text" und entfernen Sie in der Liste "Dateinamenmuster"__init__.py
.quelle
Haben Sie vergessen, die init .py in Ihr Paket aufzunehmen?
quelle
Ich habe dieses Problem in meinem Pycharm etwas anders gelöst.
Gehen Sie zu Einstellungen -> Projektinterpreter und klicken Sie dort auf das Basispaket.
Sie sehen eine Seite wie diese
Wenn Ihr Paket danach installiert ist, sollten Sie sehen, dass das Paket eher blau als weiß gefärbt ist.
Und die ungelöste Referenz ist auch weg.
quelle