pkgutil
Es handelt sich um ein Modul in der Standardbibliothek von Python, das eine Reihe paketbezogener Toolfunktionen bereitstellt, z. B. das dynamische Laden von Paketen, das rekursive Durchlaufen von Submodulen in Paketen usw. In diesem Tutorial erfahren Sie mehr über pkgutil
die Hauptfunktionen des Moduls und dessen Verwendung.
1. Einleitung
pkgutil
Ein Modul ist ein Toolmodul in der Python-Standardbibliothek, das eine Reihe paketbezogener Funktionsfunktionen bereitstellt. Zu den häufig verwendeten Funktionen gehören:
iter_modules
: Durchlaufen aller Module in einem Paket (einschließlich Unterpaketen) in Form eines Iterators.get_data
: Erhalten Sie bestimmte Daten (z. B. Bilder, Konfigurationsdateien usw.) in einem Paket oder Modul.find_loader
: Gibt ein Loader-Objekt eines Pakets oder Moduls zurück, das zum dynamischen Laden des Pakets oder Moduls verwendet wird.walk_packages
: Durchlaufen Sie rekursiv alle Nicht-Unterpaketmodule in einem Paket in Form eines Iterators.extend_path
: Suchpfad für Erweiterungsmodule, der zur Unterstützung von Namespace-Paketen verwendet wird.
Im Folgenden beschreiben wir diese Funktionen im Detail.
2. Gemeinsame Funktionen
2.1 iter_modules
iter_modules
Die Funktion wird verwendet, um alle Module (einschließlich Unterpakete) in einem Paket als Iterator zu durchlaufen. Seine Syntax ist wie folgt:
pkgutil.iter_modules(path=None, prefix='')
Unter diesen path
gibt der Parameter den Pfad (String oder Liste von Strings) des Pakets an, das durchlaufen werden soll, und ist standardmäßig auf , wenn nicht angegeben, eingestellt sys.path
. prefix
Der Parameter wird verwendet, um das Präfix des Modulnamens anzugeben. Beispielsweise prefix='mypackage.'
werden nur Module mypackage.
mit .
iter_modules
Die Funktion gibt einen Iterator zurück, ein Tupel pro Iteration (loader, name, ispkg)
, wobei:
loader
Ist ein Loader-Objekt, das zum Laden des Moduls verwendet werden kann.name
ist der vollständige Name des Moduls, z. B.mymodule
odermypackage.subpackage.mymodule
ispkg
Gibt an, ob das Modul ein Unterpaket ist.
Der folgende Code zeigt, wie iter_modules
die Funktion verwendet wird:
import pkgutil
for loader, module_name, is_pkg in pkgutil.iter_modules():
print(f"Module: {module_name}, is package: {is_pkg}")
2.2 get_data
get_data
Die Funktion wird verwendet, um die angegebenen Daten (wie Bilder, Konfigurationsdateien usw.) in einem Paket oder Modul abzurufen. Seine Syntax ist wie folgt:
pkgutil.get_data(package, resource_name)
Unter diesen package
gibt der Parameter das Paket oder Modul an, um Daten abzurufen, resource_name
und gibt den Namen der abzurufenden Daten an.
Der folgende Code zeigt, wie eine Funktion verwendet wird, get_data
um die Daten einer Bildressource in einem Paket abzurufen:
import pkgutil
data = pkgutil.get_data('mypackage', 'logo.png')
with open('logo.png', 'wb') as f:
f.write(data)
2.3 find_loader
find_loader
Die Funktion wird verwendet, um ein Loader-Objekt eines Pakets oder Moduls zurückzugeben, das zum dynamischen Laden des Pakets oder Moduls verwendet wird. Seine Syntax ist wie folgt:
pkgutil.find_loader(module_name)
Dabei module_name
gibt der Parameter den vollständigen Namen des zu suchenden Moduls an.
find_loader
Die Funktion gibt ein Loader-Objekt zurück, über das das Paket oder Modul geladen werden kann.
find_loader
Der folgende Code zeigt, wie Sie eine Funktion verwenden , um das Loader-Objekt eines Moduls abzurufen und es zum Laden des Moduls zu verwenden:
import pkgutil
loader = pkgutil.find_loader('mymodule')
module = loader.load_module()
2.4 walk_packages
walk_packages
Funktionen sind ein iter_modules
Wrapper höherer Ebene für Funktionen, die alle Nicht-Unterpaketmodule in einem Paket rekursiv in Form von Iteratoren durchlaufen. Seine Syntax ist wie folgt:
pkgutil.walk_packages(path=None, prefix='', onerror=None, ispackage=None)
Unter diesen path
gibt der Parameter den Pfad (String oder Liste von Strings) des Pakets an, das durchlaufen werden soll, und ist standardmäßig auf , wenn nicht angegeben, eingestellt sys.path
. prefix
Der Parameter wird verwendet, um das Präfix des Modulnamens anzugeben. Beispielsweise prefix='mypackage.'
werden nur Module mypackage.
mit . onerror
und ispackage
Parameter werden verwendet, um die Fehlerbehandlungsmethode anzugeben und ob nur Unterpakete zurückgegeben werden sollen.
walk_packages
Die Funktion gibt einen Iterator zurück, ein Tupel pro Iteration (loader, name, ispkg)
, wobei:
loader
Ist ein Loader-Objekt, das zum Laden des Moduls verwendet werden kann.name
ist der vollständige Name des Moduls, z. B.mymodule
odermypackage.subpackage.mymodule
ispkg
Gibt an, ob das Modul ein Unterpaket ist.
Der folgende Code zeigt, wie eine Funktion verwendet wird walk_packages
, um alle Nicht-Unterpaketmodule in einem Paket rekursiv zu durchlaufen:
import pkgutil
for loader, module_name, is_pkg in pkgutil.walk_packages():
print(f"Module: {module_name}, is package: {is_pkg}")
2.5 Erweiterungspfad
extend_path
Funktion zum Erweitern des Modulsuchpfads zur Unterstützung von Namespace-Paketen. Seine Syntax ist wie folgt:
pkgutil.extend_path(path, name)
Unter diesen path
sollte der Parameter eine Liste sein, in der der zu erweiternde Modulsuchpfad gespeichert ist. name
Das Argument gibt den Namen des zu erweiternden Namespace-Pakets an.
extend_path
Die Funktion gibt eine neue Liste von Pfaden zurück, die die Pfade name
für , die einen Namensraum haben. Wenn die Importanweisung von Python auf name
einen Modulnamen trifft, der mit beginnt, kann das Modul auf diese Weise korrekt geladen werden.
Der folgende Code zeigt, wie Funktionen verwendet werden extend_path
, um den Modulsuchpfad zu erweitern und Namespace-Pakete zu unterstützen:
import pkgutil
pkg_path = ['myapp/']
pkgutil.extend_path(pkg_path, 'myapp.namespace')
3. Zusammenfassung
pkgutil
In diesem Artikel werden die Module in der Python-Standardbibliothek vorgestellt , einschließlich der Verwendung allgemeiner Funktionen iter_modules
, get_data
, find_loader
, walk_packages
usw. Das Modul ist ein sehr nützliches Toolmodul in der Python-Entwicklung. Es kann problemlos Aufgaben wie Paketverwaltung, dynamisches Laden und Moduldurchquerung implementieren. Später werden wir die Verwendung dieses Moduls in Kombination mit der Verpackungsszene von Pyinstaller analysieren.extend_path
pkgutil