Inhaltsverzeichnis
1. Was ist ein Modul und was ist ein Paket?
Module
Paket
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:
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.
4.一个自定义包的例子
最后的话
Heim Backend-Entwicklung Python-Tutorial Wie funktioniert der Import von Python?

Wie funktioniert der Import von Python?

May 15, 2023 pm 08:13 PM
python 模块 import

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
Nach dem Login kopieren
Nach dem Login kopieren

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:

Python 的 import 是怎么工作的?

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
Nach dem Login kopieren

Das Ausführen von file2.py kann zu den folgenden Ergebnissen führen:

❯ python file2.py
This is file2.py
This is file1.py
Nach dem Login kopieren

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:

Python 的 import 是怎么工作的?Sie können die Reihenfolge sehen sys.path:

wird zuerst den Pfad suchen, in dem sich das Ausführungsskript befindet
  • 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:

Python 的 import 是怎么工作的?

Wenn ein Modul ein anderes Modul importiert und dieses ein anderes Modul importiert, sucht der Interpreter im sys.path des ersten Moduls nach der zweiten Importanweisung.
  • 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
Nach dem Login kopieren

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
Nach dem Login kopieren

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")
Nach dem Login kopieren

file4.py :

from . import file3
print("This is file4.py")
Nach dem Login kopieren

只要我们直接运行 file4.py,那是一定会报错的:Python 的 import 是怎么工作的?

Python 提示我们:

ImportError: attempted relative import with no known parent package
Nach dem Login kopieren
Nach dem Login kopieren

也就是说相对导入不知道父包是谁,换句话说,这是一个子包,必须让父包来调用它,直接运行这个文件是不行的,即使你在 file4.py 的目录 subpackage1 同级的目录执行该文件也是不行的,见上图。

但是在 file4.py 的目录 subpackage1 同级的目录作为一个 module 来执行是可以的,如下图:

Python 的 import 是怎么工作的?

换句话说,我们把 subpackage1 作为一个包来让别人用,相对导入是可以的,比如说我们在目录 subpackage1 同级的目录新建一个 file5.py 的文件,内容如下:

file5.py:

from subpackage1 import file4。

然后,执行 python file5.py 可以看出,相对导入已经正常工作:

Python 的 import 是怎么工作的?

结论

  • 如果是当做脚本文件直接运行的,使用绝对导入。
  • 如果是当做模块供其他文件导入,使用相对导入。

4.一个自定义包的例子

先上一个图来看下目录及引用结构,方块的是目录,椭圆的是文件,曲线是引用:

Python 的 import 是怎么工作的?

其中 import_example 目录下有 setup.py 和 run.py

run.py 导入了 file4、file5、file6。

file4 导入了 file3,file5 导入了 file3。

file6 导入了 file2,file2 导入了 file1。

现在我们来执行一下 run.py 看下效果:

Python 的 import 是怎么工作的?

可以看出所有相对导入都已正常工作,虽然 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!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP und Python: Code Beispiele und Vergleich PHP und Python: Code Beispiele und Vergleich Apr 15, 2025 am 12:07 AM

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 gegen JavaScript: Community, Bibliotheken und Ressourcen Python gegen JavaScript: Community, Bibliotheken und Ressourcen Apr 15, 2025 am 12:16 AM

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.

So führen Sie Programme in der terminalen VSCODE aus So führen Sie Programme in der terminalen VSCODE aus Apr 15, 2025 pm 06:42 PM

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.

Kann Visual Studio -Code in Python verwendet werden Kann Visual Studio -Code in Python verwendet werden Apr 15, 2025 pm 08:18 PM

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.

Detaillierte Erklärung des Docker -Prinzips Detaillierte Erklärung des Docker -Prinzips Apr 14, 2025 pm 11:57 PM

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.

Ist die VSCODE -Erweiterung bösartig? Ist die VSCODE -Erweiterung bösartig? Apr 15, 2025 pm 07:57 PM

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.

Kann gegen Code in Windows 8 ausgeführt werden Kann gegen Code in Windows 8 ausgeführt werden Apr 15, 2025 pm 07:24 PM

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: Automatisierung, Skript- und Aufgabenverwaltung Python: Automatisierung, Skript- und Aufgabenverwaltung Apr 16, 2025 am 12:14 AM

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.

See all articles