Erstellen eines Python-Projekts mit Modulen und Paketen

Blog

Erstellen eines Python-Projekts mit Modulen und Paketen

Modulare Programmierung bezieht sich auf den Prozess, eine große, unhandliche Programmieraufgabe in separate, kleinere, besser handhabbare Teilaufgaben oder Module aufzuteilen. Einzelne Module können dann wie Bausteine ​​zu einer größeren Anwendung zusammengeschustert werden.
In diesem Artikel zeige ich Ihnen die Gründe für ein Python-Modul, die Unterschiede zu einem Paket und wie die beiden Dinge zusammenwirken.



Python-Module vs. Python-Pakete

Ein Modul ist eine Python-Datei, die Code enthält, der mit der Erweiterung .py gespeichert wird. Jedes Mal, wenn Sie eine Funktion, eine Klasse oder eine Anweisung schreiben und in einer .py-Datei speichern, erstellen Sie tatsächlich ein neues Modul. Ein Modul kann direkt vom Python-Interpreter ausgeführt werden, z.B. Python script.py und somit Hauptmodul genannt oder von anderen Modulen importiert. Module sind eine Möglichkeit, Ihr Programm zur einfacheren Wartung in verschiedenen Dateien anzulegen.

Wenn Ihr Projekt viele Module enthält, empfiehlt es sich, diese in Ordnern zu organisieren. Angenommen, ich arbeite an einem sehr primitiven Spiel in Python namens Fancy Game: Ich möchte das Verzeichnis wie folgt strukturieren:



fancy_game/ models/ player.py monster.py audio/ mixer.py effects.py player.py graphics/ renderer.py screen.py common/ constants.py main.py

Ein Paket ist einfach eine Sammlung von Python-Modulen, die in Ordnern organisiert sind. In meinem Fancy Game könnten die Pakete sein: Models, Audio, Graphics und Common. Der Ordner fancy_game ist selbst kein Paket, da er dazu gedacht ist, direkt von Python ausgeführt zu werden (d. h. python main.py ). Manchmal möchten Sie eine Bibliothek erstellen, anstatt sie in andere Python-Programme zu importieren, damit auch der gesamte Stammordner zu einem Paket wird (bestehend aus vielen Unterpaketen).

Ein Projekt oder eine Bibliothek in Paketen organisiert zu haben, ist eine gute Sache: a) Ihr Quellcode ist noch stärker modularisiert und b) Pakete bieten Schutz vor Namenskollisionen mit anderen Modulen. Wir werden in einer Minute sehen, warum.




Das könnte Ihnen auch gefallen: So erstellen Sie die Struktur eines Python-Projekts


Verwandeln Sie einen Ordner in ein Python-Paket

Python muss angewiesen werden, welches Verzeichnis ein Paket werden soll. Fügen Sie dazu einfach eine leere Datei namens |_+_| . hinzu in jedem gewünschten Ordner. Dies ist eine spezielle Datei, die verwendet wird, um Verzeichnisse auf der Festplatte als Python-Paketverzeichnisse zu markieren. Meine Fancy Game-Ordnerstruktur wäre also:

wie man Tweets bei jemandem sieht
__init__.py

Beachten Sie, wie es keine gibt drin .py im Stammordner: Dies liegt daran, dass mein Spiel (d.h. main.py ) soll direkt vom Python-Interpreter ausgeführt werden. Im Falle einer Bibliothek fügen Sie einfach die spezielle Datei ebenfalls in das Stammverzeichnis ein.

Module aus Paketen importieren

Nachdem die gesamte Struktur eingerichtet wurde, ist der Code darin enthalten main.py muss einige Module aus den verschiedenen Paketen importieren, damit das Spiel funktioniert. Um ein Modul aus einem Paket zu importieren, müssen Sie der gepunkteten Modulnamensyntax folgen. Im Hauptmodul möchte ich zum Beispiel das Player-Modul aus dem Audiopaket importieren:

fancy_game/ models/ __init__.py <--- new __init__.py file added player.py monster.py audio/ __init__.py <--- new __init__.py file added mixer.py effects.py player.py graphics/ __init__.py <--- new __init__.py file added renderer.py screen.py common/ __init__.py <--- new __init__.py file added constants.py main.py

Allgemeiner ausgedrückt lautet die Regel |_+_|. Dies funktioniert auch, wenn Sie verschachtelte Pakete haben:|_+_| und so weiter.

Nach dem Import muss das Modul mit seinem vollständigen Namen referenziert werden. Wenn ich also die Funktion |_+_| . verwenden möchte aus dem |_+_| Modul muss ich es als |_+_| nennen. Wie oben erwähnt, ist dies eine gute Möglichkeit, Namenskonflikte zwischen verschiedenen Modulen zu vermeiden: Ich kann das Modul |_+_| . leicht importieren ohne sein Homonym zu vermasseln|_+_|:

# main.py import audio.player

Module von oben importieren

Manchmal muss ein tief vergrabenes Modul Dinge aus der oberen Ebene importieren. Zum Beispiel die |_+_| Modul benötigt möglicherweise etwas in |_+_|. Es gibt zwei Möglichkeiten, dies zu tun:

absoluter Import — Importieren Sie das Modul, als ob sich der Importer im Stammverzeichnis befindet. Python ist in der Lage, den richtigen Pfad herauszufinden. Zum Beispiel in|_+_| einfach importieren|_+_|. Dies ist meine Lieblingsoption;
relativer Import — verwenden Sie die Formel |_+_| mit Punkten, um die aktuellen und übergeordneten Pakete anzuzeigen, die am Import beteiligt sind. Zum Beispiel in|_+_| Sie können |_+_| anrufen. Ein Punkt bedeutet das aktuelle Paket, zwei Punkte sind eine Ebene höher, drei Punkte sind zwei Ebenen höher und so weiter. Ich bin kein großer Fan davon, da relative Importe leicht brechen, wenn Sie Module verschieben.

Modulnamen kürzen

Verwendung langer Namen wie |_+_| ist ziemlich unpraktisch. Sie können einen Modulnamen beim Importieren mit einem Alias ​​kürzen, zum Beispiel:

www aol com mail anmelden
import [package].[module]

Jetzt |_+_| ist erhältlich als|_+_|. Beachten Sie jedoch, dass es auf diese Weise zu Namenskonflikten zwischen Modulen kommen kann.

Erfahren Sie mehr

Python 3 Tutorial für Anfänger - Module & Pakete

#Python