Heim >Backend-Entwicklung >Python-Tutorial >Warum schlagen relative Importe in Python fehl, wenn ein Modul als „__main__' ausgeführt wird?
Relative Importe in Python: Eine detaillierte Erklärung
Beim Arbeiten mit einem strukturierten Verzeichnis, das mehrere Unterpakete enthält, kann das Importieren von Modulen aus anderen Unterpaketen ein Problem sein gemeinsame Anforderung. Allerdings kann der Standardansatz der Verwendung relativer Importe, z. B. aus ..sub2 mod2 importieren, in bestimmten Szenarien fehlschlagen.
Dies war der Fall, als ein Entwickler versuchte, mod2 aus mod1 innerhalb der bereitgestellten Verzeichnisstruktur zu importieren in der Frage. Die Fehlermeldung „Versuchter relativer Import in Nicht-Paket“ weist auf ein Problem mit dem relativen Import hin.
Die Ursache des Problems liegt in der Tatsache, dass das Modul als __main__ ausgeführt wurde, indem es als Argument an übergeben wurde der Dolmetscher. Gemäß PEP 328 verwenden relative Importe das Attribut __name__ des Moduls, um seine Position in der Pakethierarchie zu bestimmen. Wenn der Name des Moduls auf __main__ festgelegt ist, werden relative Importe so aufgelöst, als wäre das Modul ein Modul der obersten Ebene, unabhängig von seinem tatsächlichen Speicherort im Dateisystem.
Dieses Verhalten kann beim Importversuch zu Verwirrung führen Module aus anderen Unterpaketen. Um dieses Problem zu beheben, wird empfohlen, den Code in einem Skript zu platzieren und die relevanten Unterpakete explizit mit absoluten Importen zu importieren, z. B. import sub2.mod2.
In Python 2.6 und höher gibt es jedoch die Möglichkeit, auf Module zu verweisen relativ zum Hauptmodul eingeführt. PEP 366 beschreibt diese Änderung. Um relative Importe effektiv zu nutzen, ist es wichtig, auf das Hauptmodul zu verweisen, anstatt __main__ zu verwenden. Dies kann auf verschiedene Arten erreicht werden, wie zum Beispiel:
Durch die Übernahme dieser Techniken können Entwickler relative Importe effektiv nutzen, um ihre Python-Projekte zu organisieren und Abhängigkeiten zwischen Modulen strukturiert zu verwalten.
Das obige ist der detaillierte Inhalt vonWarum schlagen relative Importe in Python fehl, wenn ein Modul als „__main__' ausgeführt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!