Heim  >  Artikel  >  Backend-Entwicklung  >  Warum erhalte ich in Python den Fehler „ValueError: versuchter relativer Import über das Paket der obersten Ebene hinaus'?

Warum erhalte ich in Python den Fehler „ValueError: versuchter relativer Import über das Paket der obersten Ebene hinaus'?

Linda Hamilton
Linda HamiltonOriginal
2024-11-26 04:48:14530Durchsuche

Why Am I Getting a

Relativer Importfehler: Über Paket der obersten Ebene hinaus

In Python 3 bieten relative Importe eine bequeme Möglichkeit, auf Module innerhalb desselben zu verweisen Verzeichnis oder Paket. Es kann jedoch verwirrend sein, auf den Fehler „ValueError: versuchter relativer Import über das Paket der obersten Ebene hinaus“ zu stoßen.

Berücksichtigen Sie die folgende Paketstruktur:

package/
    __init__.py
    A/
        __init__.py
        foo.py
    test_A/
        __init__.py
        test.py

Beim Versuch, ein Modul aus einem zu importieren Unterpaket (z. B. von ..A import foo in test.py) kann der oben genannte Fehler auftreten, wenn die folgenden Bedingungen zutreffen met:

  1. Sie führen das Modul (z. B. python -m test_A.test) aus dem Paketverzeichnis (package/) aus und
  2. Sie verwenden keinen Befehl, der dies tut Gibt das Paket als Paket der obersten Ebene an (z. B. python -m package.test_A.test).

Der Grund dafür Dieser Fehler ist auf einen grundlegenden Aspekt des Importmechanismus von Python zurückzuführen. Wenn ein Paket geladen wird, wird es als „Paket der obersten Ebene“ betrachtet und relative Importe können nur auf Module innerhalb dieses Pakets oder seiner Unterpakete verweisen. Allerdings erkennt Python das übergeordnete Verzeichnis des Pakets nicht automatisch als Paket, wenn ein Modul direkt ausgeführt wird.

Daher wird im obigen Szenario, wenn Sie python -m test_A.test aus dem Paketverzeichnis heraus ausführen, das übergeordnete Verzeichnis ('package/') wird nicht als Paket betrachtet und der relative Import von ..A import foo versucht effektiv, über das Paket der obersten Ebene hinauszugehen.

Um dieses Problem zu beheben Fehler, stellen Sie sicher, dass Sie beim Ausführen des Moduls den gesamten Paketpfad angeben:

python -m package.test_A.test

Das obige ist der detaillierte Inhalt vonWarum erhalte ich in Python den Fehler „ValueError: versuchter relativer Import über das Paket der obersten Ebene hinaus'?. 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