Heim >Backend-Entwicklung >Python-Tutorial >Warum schlagen relative Importe fehl, wenn Python-Skripte direkt ausgeführt werden?

Warum schlagen relative Importe fehl, wenn Python-Skripte direkt ausgeführt werden?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-22 12:43:11619Durchsuche

Why Do Relative Imports Fail When Running Python Scripts Directly?

Warum relative Importe in Nicht-Paket-Skripten fehlschlagen

Problemdefinition:

Beim Versuch relativer Importe aus einer Python-Datei Wenn es als Skript der obersten Ebene ausgeführt wird (z. B. durch Eingabe von python myfile.py), wird eine Fehlermeldung angezeigt: „Versuchter relativer Import in Nicht-Paket.“

Modul vs. Skript verstehen:

Der Hauptunterschied liegt darin, wie Python Dateien beim Laden interpretiert. Bei direkter Ausführung als Skript hat eine Datei den Namen „__main__“. Beim Import als Modul aus einer anderen Datei spiegelt sein Name die Paketstruktur wider (z. B. „package.subpackage.module“).

Relative Importbeschränkung:

Relativ Importe basieren auf dem vollständigen Namen eines Moduls, um seine Position innerhalb der Pakethierarchie zu bestimmen. Wenn der Name eines Moduls keine Paketinformationen enthält (z. B. „__main__“), schlagen relative Importe fehl, da das Modul nicht als Teil eines Pakets betrachtet wird.

Fehlererklärung:

Wenn im vollständigen Namen eines Moduls Punkte fehlen, was auf keine Paketzuordnung hinweist, interpretiert Python es als eigenständiges Skript und relativ Importe werden ungültig. Dieser Fehler tritt auf, wenn:

  1. Versuch relativer Importe innerhalb einer Datei direkt als Skript ohne die Option „-m“ ausgeführt wird.
  2. Importieren einer Datei aus dem aktuellen Verzeichnis, in dem sich der Python-Interpreter befindet ausgeführt wird, was dazu führen kann, dass Python das Modul vorzeitig als identifiziert eigenständig.

Lösungen:

  1. Skript als Modul ausführen: Verwenden Sie python -m package.subpackage.moduleX zum Laden das Skript als Modul, wobei seine Paketzuordnung erhalten bleibt und relative aktiviert wird Importe.
  2. Skript und Modul trennen: Verschieben Sie das Skript in ein anderes Verzeichnis außerhalb des Pakets und importieren Sie es von dort, damit relative Importe funktionieren.

Zusätzliche Hinweise:

  • Das Paketverzeichnis sollte im Suchpfad des Python-Moduls enthalten sein (sys.path) für zuverlässigen Zugriff auf seinen Inhalt.
  • Ab Python 2.6 wird der „Name“ eines Moduls sowohl von den Attributen name als auch package beeinflusst.

Das obige ist der detaillierte Inhalt vonWarum schlagen relative Importe fehl, wenn Python-Skripte direkt ausgeführt 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