Heim >Backend-Entwicklung >Python-Tutorial >Warum gibt Python den Fehler „Relativer Import in Nicht-Paket' aus?

Warum gibt Python den Fehler „Relativer Import in Nicht-Paket' aus?

Susan Sarandon
Susan SarandonOriginal
2024-12-23 16:31:10362Durchsuche

Why Does Python Throw a

Relative Importe in Python: Den „Nicht-Paket“-Fehler verstehen

Das allgegenwärtige Problem „Versuchter relativer Import in Nicht-Paket“ beruht auf einem Missverständnis der Unterscheidung zwischen Skripten und Modulen und ihrem jeweiligen Verhalten während importieren.

Skript vs. Modul

Wenn eine Python-Datei direkt ausgeführt wird, fungiert sie als Skript der obersten Ebene und erhält den Namen „__main__“. Beim Import wird der Name der Datei zum Paketnamen, gefolgt vom Dateinamen, getrennt durch Punkte.

Relative Importe und Pakete

Relative Importe verwenden den Namen des Moduls, um es zu finden Position innerhalb einer Pakethierarchie. Wenn der Name des Moduls jedoch keine Paketinformationen enthält (z. B. „__main__“), werden relative Importe so aufgelöst, als wäre es ein Modul der obersten Ebene, unabhängig von seinem tatsächlichen Dateispeicherort.

Die „Nicht-Paket“-Fehler

Der Fehler tritt auf, wenn relative Importe innerhalb eines Moduls versucht werden, das nicht als Teil eines Pakets erkannt wird. Dies kann passieren, wenn im Namen des Moduls Punkte fehlen, was auf den Nicht-Paketstatus hinweist.

Lösungen

Um den Fehler zu beheben, ziehen Sie die folgenden Ansätze in Betracht:

  • Verwenden des Schalters -m:
    Um ein Modul als Modul auszuführen (nicht als Skript), verwenden Sie die Syntax „python -m package.subpackage1.moduleX“.
  • Verschieben Sie das Skript:
    Erstellen Sie ein separates Skript, das das gewünschte Modul verwendet, und führen Sie dieses Skript aus von außerhalb des Paketverzeichnisses. Dadurch wird die Zuweisung von „__main__“ zum Modulnamen vermieden und relative Importe ermöglicht.

Zusätzliche Hinweise:

  • Stellen Sie sicher, dass auf das Paketverzeichnis zugegriffen werden kann im Modulsuchpfad (sys.path).
  • Ab Python 2.6 ist der „Name“ des Moduls für Die Paketauflösung umfasst sowohl die Attribute Paket als auch Name.

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