Heim > Artikel > Backend-Entwicklung > Detaillierte Erläuterung des relativen Imports und des absoluten Imports in Python
Vorwort
Python relativer Import und absoluter Import, diese beiden Konzepte beziehen sich auf den Import innerhalb des Pakets. Paketinterner Import bedeutet, dass Module innerhalb des Pakets Module innerhalb des Pakets importieren.
Suchpfad für Python-Import
Suche nach dem Modul im aktuellen Verzeichnis
Suche
Suche Python-Importschritte in der lib-Bibliothek des Python-InstallationspfadsValueError: Attempted relative import in non-packageWas ist der Grund dafür? Beim Importieren von Modulen müssen wir zunächst einige Regeln verstehen: Wenn die Paketstruktur nicht explizit angegeben ist, bestimmt Python die Struktur eines Moduls im Paket basierend auf __name__. Wenn es __main__ ist, dann ist es es selbst ein Modul der obersten Ebene ohne Paketstruktur. Wenn es sich um eine A.B.C-Struktur handelt, ist das Modul der obersten Ebene A. Befolgen Sie grundsätzlich dieses Prinzip: Wenn es sich um einen absoluten Import handelt, kann ein Modul nur seine eigenen Submodule oder Module und deren Submodule auf derselben Ebene wie sein Modul der obersten Ebene importieren. Wenn dies der Fall ist ein relativer Import Import, ein Modul muss eine Paketstruktur haben und kann nur Module innerhalb seines Top-Level-Moduls importieren
from __future__ import absolute_import
Wenn Sie dann im Tool auf Bench verweisen, gibt es die folgenden Möglichkeiten:
thing ├── books │ ├── adventure.py │ ├── history.py │ ├── horror.py │ ├── __init__.py │ └── lovestory.py ├── furniture │ ├── armchair.py │ ├── bench.py │ ├── __init__.py │ ├── screen.py │ └── stool.py └── __init__.pyAbschließend wird noch einmal betont, dass relative Importe und absolute Importe nur für In-Package-Importe gelten, ansonsten gilt das in Dieser Artikel macht einfach keinen Sinn. Das sogenannte Paket ist das Verzeichnis, das die Datei __init__.py enthält. Diese Datei wird zuerst ausgeführt, wenn das Paket importiert wird. Die Datei kann leer sein oder ihr kann beliebiger legaler Python-Code hinzugefügt werden.
import bench # 此为 implicit relative import from . import bench # 此为 explicit relative import from furniture import bench # 此为 absolute import
Der relative Import kann harte Codierung vermeiden und ist benutzerfreundlich für die Paketwartung. Durch den absoluten Import können Namenskonflikte mit der Standardbibliothek vermieden werden. Tatsächlich wird nicht empfohlen, dass benutzerdefinierte Module dieselben Befehle wie die Standardbibliothek haben.
Wie bereits erwähnt, können Module, die relative Importe enthalten, nicht direkt ausgeführt werden. Tatsächlich wird ImportError nicht angezeigt:
Dies unterscheidet sich von absoluten Importen . Es ist der gleiche Grund. Um Module in einem Paket auszuführen, die absolute und relative Importe enthalten, können Sie dem Interpreter die Modulhierarchie mit python -m A.B.C mitteilen.
Jemand könnte fragen: Wenn sich zwei Module a.py und b.py im selben Verzeichnis befinden, warum können Sie dann a in b.py importieren?
Das liegt daran, dass das Verzeichnis, in dem sich diese beiden Dateien befinden, kein Paket ist, sodass jede Python-Datei ein unabhängiges Modul ist, das von anderen Modulen direkt importiert werden kann, genau wie Sie die Standardbibliothek importieren, sie sind es nicht Es gibt Probleme mit relativen Importen und absoluten Importen. Relative Importe und absolute Importe werden nur innerhalb von Paketen verwendet.
ImportError: No module named XXXZusammenfassungDas Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels für alle beim Erlernen oder Verwenden von Python hilfreich sein kann eine Botschaft zum Mitteilen. Ausführlichere Erläuterungen zu relativen Importen und absoluten Importen in Python finden Sie auf der chinesischen PHP-Website!