Heim  >  Artikel  >  Backend-Entwicklung  >  Warum schlägt Python bei relativen Importen aus einem Paketverzeichnis fehl, wenn „python -m' verwendet wird?

Warum schlägt Python bei relativen Importen aus einem Paketverzeichnis fehl, wenn „python -m' verwendet wird?

Linda Hamilton
Linda HamiltonOriginal
2024-11-24 02:52:08899Durchsuche

Why Does Python Fail Relative Imports from a Package Directory When Using `python -m`?

Über den Paketfehler der obersten Ebene beim relativen Import hinaus

Beim Versuch, relative Importe aus den Untermodulen eines Pakets auszuführen, tritt ein verwirrender Fehler auf im Paketverzeichnis. Insbesondere ist der Fehler „ValueError: relativer Importversuch über Paket der obersten Ebene hinaus“ aufgetreten.

Dieser Fehler ist auf das eigenartige Verhalten von Python zurückzuführen, den Speicherort, von dem ein Paket geladen wurde, nicht aufzuzeichnen. Folglich wird beim Ausführen eines Moduls mit python -m Paketname.Modulname das aktuelle Arbeitsverzeichnis nicht als Paket betrachtet.

Daher ist ein relativer Importversuch wie from ..Ein Import foo, der auf ein Modul zugreifen soll in einem Geschwisterverzeichnis führt zur Fehlermeldung. Dies liegt daran, dass in Python der erforderliche Verweis auf das Geschwisterverzeichnis fehlt.

Im Gegensatz dazu ermöglicht die Ausführung des Moduls mit python -m package_name.package_submodule.module_name eine erfolgreiche Auflösung der from ..A import foo import-Anweisung. In diesem Fall behält Python das Wissen über das übergeordnete Verzeichnis, was den Zugriff auf Geschwisterverzeichnisse ermöglicht.

Es bleibt unklar, warum Python das aktuelle Arbeitsverzeichnis trotz seines praktischen Nutzens nicht als Paket betrachtet. Diese Einschränkung kann zu Verwirrung und unerwarteten Fehlern führen, wenn relative Importe aus dem Paketverzeichnis durchgeführt werden.

Das obige ist der detaillierte Inhalt vonWarum schlägt Python bei relativen Importen aus einem Paketverzeichnis fehl, wenn „python -m' verwendet 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