Heim >Backend-Entwicklung >Python-Tutorial >Warum schlagen relative Importe in Python fehl, wenn ein Modul als „__main__' ausgeführt wird?

Warum schlagen relative Importe in Python fehl, wenn ein Modul als „__main__' ausgeführt wird?

DDD
DDDOriginal
2024-12-19 06:43:10375Durchsuche

Why Do Relative Imports Fail in Python When a Module is Run as `__main__`?

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:

  • __init__.py kann ein __package__-Attribut deklarieren, um dem enthaltenden Paket einen Namen zuzuweisen.
  • Verwenden Sie die Methode __import__(), um Importieren Sie das Unterpaket und weisen Sie es einer Variablen zu.
  • Verwenden Sie ein Platzhaltermodul __init__.py, um __path__ zu deklarieren. und __package__-Attribute, auch wenn das Modul leer ist.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn