Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich den Fehler „Versuchter relativer Import in Nicht-Paket' in Python beheben?

Wie kann ich den Fehler „Versuchter relativer Import in Nicht-Paket' in Python beheben?

Barbara Streisand
Freigeben: 2024-12-24 02:21:15
Original
197 Leute haben es durchsucht

How Can I Solve

Relative Importe in Python: Ein umfassender Leitfaden

Das Problem: Module über Unterpakete hinweg importieren

Stellen Sie sich die folgende Verzeichnisstruktur vor:

app/
   __init__.py
   sub1/
      __init__.py
      mod1.py
   sub2/
      __init__.py
      mod2.py
Nach dem Login kopieren

Um etwas aus Mod2 innerhalb des Moduls Mod1 zu importieren, wurde der folgende Code verwendet versucht:

from ..sub2 import mod2
Nach dem Login kopieren
Nach dem Login kopieren

Dies führt jedoch zu dem Fehler: „Versuchter relativer Import in Nicht-Paket.“

Die Lösung: Deklariertes Paket

Der Fehler tritt auf, weil Indem Python das Modul als __main__ ausführt und das Argument mod1.py an den Interpreter übergibt, behandelt es es als Modul der obersten Ebene und ignoriert das Paket Informationen.

Um dieses Problem zu beheben, müssen die Dateien __init__.py sowohl im sub1- als auch im sub2-Verzeichnis ordnungsgemäß initialisiert werden. Dies bedeutet, dass es sich bei diesen Verzeichnissen tatsächlich um Pakete handelt und wir mithilfe relativer Importe über sie hinweg importieren können.

Wenn die Dateien __init__.py vorhanden sind, importiert der folgende Code erfolgreich Mod2 in Mod1:

from ..sub2 import mod2
Nach dem Login kopieren
Nach dem Login kopieren

Relative Importe und PEP 366

PEP 366 schlägt einen Mechanismus zum Referenzieren von Modulen relativ zu vor Hauptmodul. In Python 2.6 und späteren Versionen können Sie Module relativ zum Hauptmodul mithilfe der folgenden Syntax importieren:

from . import mod2
from .. import sub2
Nach dem Login kopieren

Dieses Verhalten stimmt mit der erwarteten Funktionalität für Unterpaketimporte überein und gewährleistet einen konsistenten und intuitiven Importmechanismus.

Das obige ist der detaillierte Inhalt vonWie kann ich den Fehler „Versuchter relativer Import in Nicht-Paket' in Python beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage