Heim >Backend-Entwicklung >Python-Tutorial >Warum gibt Python den Fehler „Relativer Import in Nicht-Paket' aus und wie kann ich ihn beheben?

Warum gibt Python den Fehler „Relativer Import in Nicht-Paket' aus und wie kann ich ihn beheben?

Susan Sarandon
Susan SarandonOriginal
2024-12-24 21:41:14527Durchsuche

Why Does Python Throw a

Relative Importe: Ein tieferer Einblick

In der Welt der Python-Programmierung sorgen relative Importe häufig für Verwirrung. Dieser Artikel befasst sich mit den Feinheiten relativer Importe und geht auf die allgegenwärtige Fehlermeldung „Versuchter relativer Import in Nicht-Paket“ ein.

Die Unterscheidung zwischen Skript und Modul

Verstehen Der grundlegende Unterschied zwischen einem Skript und einem Modul ist entscheidend. Wenn Sie eine Python-Datei direkt ausführen, wird sie zu einem Skript und erhält den Namen __main__. Wenn eine Datei hingegen importiert wird, wird sie zu einem Modul mit einem Namen, der ihre Position in der Pakethierarchie enthält.

Modulbenennung

Der zugewiesene Name zu einem Modul hängt davon ab, ob es aus einem Paket oder direkt aus seinem Verzeichnis importiert wurde. Wenn ein Modul aus einem Paket importiert wird, folgt sein Name dem durch Punkte getrennten Pfad des Pakets und seines enthaltenden Unterpakets (z. B. package.subpackage1.moduleA). Wenn ein Modul jedoch direkt aus seinem Verzeichnis importiert wird, ist sein Name nur der Modulname (z. B. ModulA).

Relative Importe und Pakete

Relative Importe Verlassen Sie sich auf den Namen eines Moduls, um seine Position in der Pakethierarchie zu bestimmen. Wenn der Name eines Moduls keine Punkte enthält, gilt es nicht als Teil eines Pakets. Dies bedeutet, dass relative Importe, die versuchen, außerhalb des aktuellen Verzeichnisses des Moduls zu durchlaufen, mit dem Fehler „relativer Import in Nicht-Paket“ fehlschlagen.

Beheben des Fehlers

An Um diesen Fehler zu beheben, ziehen Sie die folgenden Lösungen in Betracht:

  1. Verwenden Sie -m Option: Stellen Sie dem Befehl, der zum Ausführen des Skripts verwendet wird, -m voran, was angibt, dass es als Modul und nicht als Skript behandelt werden soll. Beispiel: python -m package.subpackage1.moduleX
  2. Verschieben Sie das Skript aus dem Paketverzeichnis: Erstellen Sie ein separates Verzeichnis zum Ausführen des Skripts und importieren Sie Module aus dem Paket in dieses Skript. Dadurch wird sichergestellt, dass das Skript als Skript mit dem Namen main geladen wird, sodass relative Importe ordnungsgemäß funktionieren.

Beachten Sie, dass das Paketverzeichnis in Python enthalten sein muss Modulsuchpfad (sys.path), damit diese Lösungen funktionieren. Darüber hinaus verfügen Module ab Python 2.6 über die Attribute Name und Paket, die ihren effektiven Namen beeinflussen.

Das obige ist der detaillierte Inhalt vonWarum gibt Python den Fehler „Relativer Import in Nicht-Paket' aus und wie kann ich ihn beheben?. 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