Heim > Artikel > Backend-Entwicklung > Warum gibt Python den Fehler „ValueError: versuchter relativer Import über das Paket der obersten Ebene hinaus' aus und wie kann er vermieden werden?
Relativer Import über das Paket der obersten Ebene hinaus
Wenn Sie versuchen, relative Importe innerhalb eines mehrstufigen Python-Pakets durchzuführen, führen Sie das Modul aus dem Paketverzeichnis aus kann zum Fehler „ValueError: versuchter relativer Import über das Paket der obersten Ebene hinaus“ führen. Für eine effektive Paketverwaltung ist es von entscheidender Bedeutung, den Grund für diesen Fehler zu verstehen.
Der Fehler tritt auf, weil Python keine Aufzeichnungen darüber führt, woher Pakete geladen werden. Das Ausführen eines Moduls als „python -m test_A.test“ informiert Python im Wesentlichen darüber, dass sich test_A.test nicht in einem Paket befindet (obwohl es sich in Paket/test_A befindet). Folglich wird der Versuch „from ..A import foo“ ungültig, da Python nicht weiß, dass test_A Teil eines größeren Pakets ist.
Im Gegensatz dazu behält die Verwendung von „python -m package.test_A.test“ die hierarchische Struktur bei und ermöglicht die erfolgreiche Auflösung von „from ..A import foo“. Es spiegelt genau die Tatsache wider, dass test_A ein untergeordnetes Verzeichnis innerhalb des geladenen Pakets „Paket“ ist.
Der zugrunde liegende Grund, warum Python das aktuelle Arbeitsverzeichnis nicht als Paket betrachtet, ist unbekannt. Diese Einschränkung kann jedoch gemildert werden, indem Verzeichnisse mithilfe der Datei „__init__.py“ explizit als Pakete deklariert werden und beim Importieren von Modulen der Paketsuchmechanismus von Python eingehalten wird.
Das obige ist der detaillierte Inhalt vonWarum gibt Python den Fehler „ValueError: versuchter relativer Import über das Paket der obersten Ebene hinaus' aus und wie kann er vermieden werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!