Python Package
Table of Contents
In diesem Artikel erfahren Sie, wie Sie Ihre Codebasis mithilfe von Python Packages in saubere, effiziente Module aufteilen. Außerdem lernen Sie, Ihre eigenen Packages oder Packages von Drittanbietern in ein Python-Programm zu importieren und zu verwenden.
Was sind Packages?
Normalerweise speichern wir nicht alle unsere Dateien auf unserem Computer am selben Ort. Wir verwenden eine gut organisierte Verzeichnishierarchie für einen einfacheren Zugriff.
Ähnliche Dateien werden im selben Verzeichnis gespeichert, zum Beispiel können wir alle Lieder im Verzeichnis “Musik” aufbewahren. Analog dazu gibt es in Python Packages für Verzeichnisse und Module für Dateien.
Da unser Anwendungsprogramm mit vielen Modulen größer wird, platzieren wir ähnliche Module in einem Package und unterschiedliche Module in verschiedenen Packages. Dies macht ein Projekt (Programm) einfach zu verwalten und konzeptionell klar.
Ebenso wie ein Verzeichnis Unterverzeichnisse und Dateien enthalten kann, kann ein Python-Package Unterpackages und Module haben.
Ein Verzeichnis muss eine Datei namens enthalten __init__.py
damit Python es als Package betrachten kann. Diese Datei kann leer gelassen werden, aber im Allgemeinen platzieren wir den Initialisierungscode für dieses Package in dieser Datei.
Hier ist ein Beispiel. Angenommen, wir entwickeln ein Spiel. Eine mögliche Organisation von Packages und Modulen könnte wie in der Abbildung unten gezeigt aussehen.
Modul aus einem Package importieren
Wir können Module aus Packages importieren, indem wir den Punktoperator (.) verwenden.
Wenn wir beispielsweise die importieren möchten start
Modul im obigen Beispiel kann dies wie folgt erfolgen:
import Game.Level.start
Wenn dieses Modul nun eine Funktion enthält named select_difficulty()
,wir müssen den vollständigen Namen verwenden, um darauf zu verweisen.
Game.Level.start.select_difficulty(2)
Wenn dieses Konstrukt langwierig erscheint, können wir das Modul ohne das Package präfix wie folgt importieren:
from Game.Level import start
Wir können die Funktion nun einfach wie folgt aufrufen:
start.select_difficulty(2)
Eine andere Möglichkeit, nur die erforderliche Funktion (oder Klasse oder Variable) aus einem Modul innerhalb eines Package zu importieren, wäre wie folgt:
from Game.Level.start import select_difficulty
Jetzt können wir diese Funktion direkt aufrufen.
Obwohl einfacher, wird diese Methode nicht empfohlen. Die Verwendung des vollständigen Namespace vermeidet Verwirrung und verhindert, dass zwei gleiche Bezeichnernamen kollidieren.
Beim Importieren von Packages sucht Python in der Liste der Verzeichnisse, die in sys.path
, ähnlich wie für Suchpfad des Moduls.