Wie funktioniert der Import von Python?
Hallo, mein Name ist somenzz, du kannst mich Bruder Zheng nennen.
Pythons Import ist sehr intuitiv, aber trotzdem werden Sie manchmal feststellen, dass wir immer noch auf ModuleNotFoundError stoßen, obwohl der relative Pfad sehr korrekt ist.
ImportError: attempted relative import with no known parent package
Beim Importieren eines Moduls Im selben Verzeichnis sind die Module in verschiedenen Verzeichnissen völlig unterschiedlich. In diesem Artikel werden einige Probleme analysiert, die bei der Verwendung des Imports häufig auftreten. Auf dieser Grundlage können Sie ganz einfach Ihr eigenes Paket erstellen.
1. Was ist ein Modul und was ist ein Paket?
Module
Die Beziehung zwischen Modulen und Paketen kann mit Dateien und Verzeichnissen verglichen werden.
Die Python-Dokumentation beschreibt dies, eine Python-Datei ist ein Modul und der Python-Dateiname (ohne das Suffix .py) ist der Modulname.
Ein Modul kann Variablen, Funktionen und Klassen enthalten, die Teil des vom Modul definierten Namensraums sind, sodass die Benennung von Variablen kein Problem darstellt, da zwei verschiedene Module Variablen, Funktionen und Klassen mit demselben Namen haben können.
Paket
Die Beziehung zwischen Modulen und Paketen kann mit Dateien und Verzeichnissen verglichen werden. Ein Paket ist ein Verzeichnis.
Ein Paket kann Module oder Unterpakete enthalten. Ein Modul definiert einen Namensraum, sodass Variablen, Funktionen und Klassen in zwei verschiedenen Modulen denselben Namen haben können. Auf das Hauptpaket kann über den Punkt zugegriffen werden .
Ein Basispaket kann Unterpakete, Module, __init__.py (nicht erforderlich nach Python 3.3) und setup.py enthalten. Eine mögliche Paketstruktur sieht so aus:
Und setup.py existiert im Home-Verzeichnis, in dem sich Ihr Paket befindet, und enthält Konfigurationsinformationen wie erforderliche Abhängigkeiten, Skripte und Unterpakete. Sie können auch Metadaten zum Paket angeben, z. B. den Namen, den Autor, die Beschreibung usw. des Pakets.
setup.py ist die Datei, die pip zur Installation Ihres Pakets verwendet.
Was beim 2. Import passiert ist? Nehmen wir zunächst ein einfaches Beispiel: Es gibt zwei Dateien im selben Verzeichnis, file1.py und file2.py. Drucken Sie einfach die jeweiligen Dateinamen aus. Der Unterschied besteht darin, dass Datei1 in Datei2.py importiert wird:
#file1.py print("This is file1.py") #file2.py print("This is file2.py") import file1
Das Ausführen von file2.py kann zu den folgenden Ergebnissen führen:
❯ python file2.py This is file2.py This is file1.py
Es ist ersichtlich, dass:
Import sehr intuitiv ist, jeder, der es verwendet, kann importieren.- Die Importanweisung ist eine gewöhnliche Anweisung und kann überall platziert werden.
- Wenn eine Datei importiert wird, wird sie ausgeführt und ihre internen Klassen oder Objekte werden ihrem Namespace hinzugefügt. Wir müssen auch die Suchreihenfolge des Imports kennen. Denken Sie daran, dass der Import in sys.path sucht.
Wenn ich beispielsweise am Ende von file2.py eine Codezeile hinzufüge: import sys; print(sys.path), kann der Suchpfad des Imports gedruckt werden:
Sie können die Reihenfolge sehen sys.path:
- Standardbibliothek
- Site-Pakete für Bibliotheken von Drittanbietern Was Sie bei sys.path beachten müssen, ist:
In der Interpreterumgebung ist sys.path[0] der Startpfad des Interpreters.
- sys.path hängt nicht vom Arbeitspfad des aktuellen Programms ab – os.getcwd(), sondern nur davon auf dem Pfad, in dem sich das erste Skript befindet:
- Sobald ein Modul oder Paket gefunden wird, wird es ausgeführt. Wenn das Paket eine Initialisierungsdatei __init__.py enthält, wird __init__.py beim Importieren zuerst ausgeführt.
Dann wird das zu importierende Projekt zu seinem Namensraum hinzugefügt und wir können es über xx.yy verwenden.
3. Wann sollte der relative Import und wann der absolute Import verwendet werden? Schauen wir uns zunächst an, was der absolute Import ist:
import aa import aa.bb from aa import bb
Diese Methode ist sehr intuitiv .path zur Suche. Wenn Sie auf ModuleNotFoundError stoßen, überlegen Sie, warum sys.path nicht über das Paket verfügt, das wir importieren möchten, oder fügen Sie den Pfad dieses Pakets manuell in sys.path ein.
Schauen wir uns an, was relativer Import ist. Der sogenannte relative Import hat die Form:
from . import aa from .aa import bb from .. import yy
Das heißt, es gibt ein Zeichen im relativen Pfad, das die relative Position des Moduls angibt importiert oder das aktuelle Paket.
Zum Beispiel erstellen wir ein neues Verzeichnis subpackage1 unter dem Verzeichnis pythonimportexample und erstellen zwei neue Dateien file3.py und file4.py in subpackage1.
Der Inhalt ist wie folgt:
file3.py :print("This is file3.py")
file4.py :
from . import file3 print("This is file4.py")
只要我们直接运行 file4.py,那是一定会报错的:
Python 提示我们:
ImportError: attempted relative import with no known parent package
也就是说相对导入不知道父包是谁,换句话说,这是一个子包,必须让父包来调用它,直接运行这个文件是不行的,即使你在 file4.py 的目录 subpackage1 同级的目录执行该文件也是不行的,见上图。
但是在 file4.py 的目录 subpackage1 同级的目录作为一个 module 来执行是可以的,如下图:
换句话说,我们把 subpackage1 作为一个包来让别人用,相对导入是可以的,比如说我们在目录 subpackage1 同级的目录新建一个 file5.py 的文件,内容如下:
file5.py:
from subpackage1 import file4。
然后,执行 python file5.py 可以看出,相对导入已经正常工作:
结论
- 如果是当做脚本文件直接运行的,使用绝对导入。
- 如果是当做模块供其他文件导入,使用相对导入。
4.一个自定义包的例子
先上一个图来看下目录及引用结构,方块的是目录,椭圆的是文件,曲线是引用:
其中 import_example 目录下有 setup.py 和 run.py
run.py 导入了 file4、file5、file6。
file4 导入了 file3,file5 导入了 file3。
file6 导入了 file2,file2 导入了 file1。
现在我们来执行一下 run.py 看下效果:
可以看出所有相对导入都已正常工作,虽然 file3 被导入了两次,但只执行了一次,说明 Python 内部已经考虑了同一个包的多重导入问题。
自定义包就是让其他文件导入使用的,因此 pythonimportexample目录下都使用相对导入,源代码见:
https://gitee.com/somenzz/code-example/tree/master/import_example
点阅读原文也可以直接访问。
这里还有一些自定义包的例子:
- dbinterface[1]
- transferfile[2]
最后的话
本文分享了什么是模块(module),什么是包(package),import 的搜索路径,也分享了相对导入和绝对导入的区别,最后举了一个非常实用的 import 例子,方便你构建自己的包。
Das obige ist der detaillierte Inhalt vonWie funktioniert der Import von Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



PHP und Python haben ihre eigenen Vor- und Nachteile, und die Wahl hängt von den Projektbedürfnissen und persönlichen Vorlieben ab. 1.PHP eignet sich für eine schnelle Entwicklung und Wartung großer Webanwendungen. 2. Python dominiert das Gebiet der Datenwissenschaft und des maschinellen Lernens.

Python und JavaScript haben ihre eigenen Vor- und Nachteile in Bezug auf Gemeinschaft, Bibliotheken und Ressourcen. 1) Die Python-Community ist freundlich und für Anfänger geeignet, aber die Front-End-Entwicklungsressourcen sind nicht so reich wie JavaScript. 2) Python ist leistungsstark in Bibliotheken für Datenwissenschaft und maschinelles Lernen, während JavaScript in Bibliotheken und Front-End-Entwicklungsbibliotheken und Frameworks besser ist. 3) Beide haben reichhaltige Lernressourcen, aber Python eignet sich zum Beginn der offiziellen Dokumente, während JavaScript mit Mdnwebdocs besser ist. Die Wahl sollte auf Projektbedürfnissen und persönlichen Interessen beruhen.

Im VS -Code können Sie das Programm im Terminal in den folgenden Schritten ausführen: Erstellen Sie den Code und öffnen Sie das integrierte Terminal, um sicherzustellen, dass das Codeverzeichnis mit dem Terminal Working -Verzeichnis übereinstimmt. Wählen Sie den Befehl aus, den Befehl ausführen, gemäß der Programmiersprache (z. B. Pythons Python your_file_name.py), um zu überprüfen, ob er erfolgreich ausgeführt wird, und Fehler auflösen. Verwenden Sie den Debugger, um die Debugging -Effizienz zu verbessern.

VS -Code kann zum Schreiben von Python verwendet werden und bietet viele Funktionen, die es zu einem idealen Werkzeug für die Entwicklung von Python -Anwendungen machen. Sie ermöglichen es Benutzern: Installation von Python -Erweiterungen, um Funktionen wie Code -Abschluss, Syntax -Hervorhebung und Debugging zu erhalten. Verwenden Sie den Debugger, um Code Schritt für Schritt zu verfolgen, Fehler zu finden und zu beheben. Integrieren Sie Git für die Versionskontrolle. Verwenden Sie Tools für die Codeformatierung, um die Codekonsistenz aufrechtzuerhalten. Verwenden Sie das Lining -Tool, um potenzielle Probleme im Voraus zu erkennen.

Docker verwendet Linux -Kernel -Funktionen, um eine effiziente und isolierte Anwendungsumgebung zu bieten. Sein Arbeitsprinzip lautet wie folgt: 1. Der Spiegel wird als schreibgeschützte Vorlage verwendet, die alles enthält, was Sie für die Ausführung der Anwendung benötigen. 2. Das Union File System (UnionFS) stapelt mehrere Dateisysteme, speichert nur die Unterschiede, speichert Platz und beschleunigt. 3. Der Daemon verwaltet die Spiegel und Container, und der Kunde verwendet sie für die Interaktion. 4. Namespaces und CGroups implementieren Container -Isolation und Ressourcenbeschränkungen; 5. Mehrere Netzwerkmodi unterstützen die Containerverbindung. Nur wenn Sie diese Kernkonzepte verstehen, können Sie Docker besser nutzen.

VS -Code -Erweiterungen stellen böswillige Risiken dar, wie das Verstecken von böswilligem Code, das Ausbeutetieren von Schwachstellen und das Masturbieren als legitime Erweiterungen. Zu den Methoden zur Identifizierung böswilliger Erweiterungen gehören: Überprüfung von Verlegern, Lesen von Kommentaren, Überprüfung von Code und Installation mit Vorsicht. Zu den Sicherheitsmaßnahmen gehören auch: Sicherheitsbewusstsein, gute Gewohnheiten, regelmäßige Updates und Antivirensoftware.

VS -Code kann unter Windows 8 ausgeführt werden, aber die Erfahrung ist möglicherweise nicht großartig. Stellen Sie zunächst sicher, dass das System auf den neuesten Patch aktualisiert wurde, und laden Sie dann das VS -Code -Installationspaket herunter, das der Systemarchitektur entspricht und sie wie aufgefordert installiert. Beachten Sie nach der Installation, dass einige Erweiterungen möglicherweise mit Windows 8 nicht kompatibel sind und nach alternativen Erweiterungen suchen oder neuere Windows -Systeme in einer virtuellen Maschine verwenden müssen. Installieren Sie die erforderlichen Erweiterungen, um zu überprüfen, ob sie ordnungsgemäß funktionieren. Obwohl VS -Code unter Windows 8 möglich ist, wird empfohlen, auf ein neueres Windows -System zu upgraden, um eine bessere Entwicklungserfahrung und Sicherheit zu erzielen.

Python zeichnet sich in Automatisierung, Skript und Aufgabenverwaltung aus. 1) Automatisierung: Die Sicherungssicherung wird durch Standardbibliotheken wie OS und Shutil realisiert. 2) Skriptschreiben: Verwenden Sie die PSUTIL -Bibliothek, um die Systemressourcen zu überwachen. 3) Aufgabenverwaltung: Verwenden Sie die Zeitplanbibliothek, um Aufgaben zu planen. Die Benutzerfreundlichkeit von Python und die Unterstützung der reichhaltigen Bibliothek machen es zum bevorzugten Werkzeug in diesen Bereichen.
