Heim >Backend-Entwicklung >Python-Tutorial >Warum erhalte ich in Python die Meldung „Versuchter relativer Import in Nicht-Paket'?
Relative Importe in Python
Der häufige Fehler „Versuchter relativer Import in Nicht-Paket“ tritt häufig auf, wenn mit relativen Importen in gearbeitet wird Python. Ziel dieses Artikels ist es, das Konzept relativer Importe zu klären und Lösungen zur Behebung dieses Fehlers bereitzustellen.
Unterschied zwischen Skripten und Modulen
Der Hauptunterschied liegt in der Art und Weise, wie Python-Dateien sind geladen. Eine Datei, die direkt mit Python myfile.py ausgeführt wird, wird als Skript der obersten Ebene betrachtet. Umgekehrt ist eine Datei, die mithilfe einer Importanweisung in eine andere Datei importiert wird, ein Modul. Diese Unterscheidung ist entscheidend für das Verständnis relativer Importe.
Wichtigkeit der Benennung
Beim Laden wird jeder Datei ein Name zugewiesen, der im Attribut name gespeichert ist . Wenn es als Skript geladen wird, wird sein Name auf __main__ gesetzt. Wenn es als Modul importiert wird, spiegelt sein Name sowohl das Paket wider, zu dem es gehört, als auch den Dateinamen.
Zum Beispiel in der bereitgestellten Verzeichnisstruktur:
package/ __init__.py subpackage1/ __init__.py moduleX.py moduleY.py subpackage2/ __init__.py moduleZ.py moduleA.py
Beim Importieren von ModulX wird ihm der Name zugewiesen package.subpackage1.moduleX, während der Import von moduleA zum Namen package.moduleA führt. Wenn Sie jedoch eines der Module direkt ausführen, wird dessen Name auf __main__ gesetzt, wodurch die Paketinformationen unterdrückt werden.
Relative Importe
Relative Importe navigieren mithilfe von Pakethierarchien der Name eines Moduls. Beispielsweise zeigt from .. import foo eine Bewegung nach oben in der Hierarchie an. Für die Verwendung von „from .. import“ für „ascenden“ muss der Name eines Moduls ausreichend Punkte enthalten.
Nicht-Paket-Module
Module, deren Name keine Punkte enthält, werden jedoch nicht als Teil davon betrachtet ein Paket. Daher schlagen relative Importe mit dem Nicht-Paket-Fehler in solchen Modulen fehl.
Lösungen
Um den Fehler zu beheben, ziehen Sie die folgenden Lösungen in Betracht:
Das obige ist der detaillierte Inhalt vonWarum erhalte ich in Python die Meldung „Versuchter relativer Import in Nicht-Paket'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!