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?

Warum gibt Python den Fehler „ValueError: versuchter relativer Import über das Paket der obersten Ebene hinaus' aus und wie kann er vermieden werden?

Barbara Streisand
Barbara StreisandOriginal
2024-11-21 09:24:11356Durchsuche

Why Does Python Throw a

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!

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