Grundlegende Anweisungen zur Verwendung von Python pkgutil

pkgutilEs 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 pkgutildie Hauptfunktionen des Moduls und dessen Verwendung.

1. Einleitung

pkgutilEin 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_modulesDie 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 pathgibt 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. prefixDer Parameter wird verwendet, um das Präfix des Modulnamens anzugeben. Beispielsweise prefix='mypackage.'werden nur Module mypackage.mit .

iter_modulesDie Funktion gibt einen Iterator zurück, ein Tupel pro Iteration (loader, name, ispkg), wobei:

  • loaderIst ein Loader-Objekt, das zum Laden des Moduls verwendet werden kann.
  • nameist der vollständige Name des Moduls, z. B. mymoduleodermypackage.subpackage.mymodule
  • ispkgGibt an, ob das Modul ein Unterpaket ist.

Der folgende Code zeigt, wie iter_modulesdie 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_dataDie 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 packagegibt der Parameter das Paket oder Modul an, um Daten abzurufen, resource_nameund gibt den Namen der abzurufenden Daten an.

Der folgende Code zeigt, wie eine Funktion verwendet wird, get_dataum 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_loaderDie 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_namegibt der Parameter den vollständigen Namen des zu suchenden Moduls an.

find_loaderDie Funktion gibt ein Loader-Objekt zurück, über das das Paket oder Modul geladen werden kann.

find_loaderDer 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_packagesFunktionen sind ein iter_modulesWrapper 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 pathgibt 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. prefixDer Parameter wird verwendet, um das Präfix des Modulnamens anzugeben. Beispielsweise prefix='mypackage.'werden nur Module mypackage.mit . onerrorund ispackageParameter werden verwendet, um die Fehlerbehandlungsmethode anzugeben und ob nur Unterpakete zurückgegeben werden sollen.

walk_packagesDie Funktion gibt einen Iterator zurück, ein Tupel pro Iteration (loader, name, ispkg), wobei:

  • loaderIst ein Loader-Objekt, das zum Laden des Moduls verwendet werden kann.
  • nameist der vollständige Name des Moduls, z. B. mymoduleodermypackage.subpackage.mymodule
  • ispkgGibt 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_pathFunktion zum Erweitern des Modulsuchpfads zur Unterstützung von Namespace-Paketen. Seine Syntax ist wie folgt:

pkgutil.extend_path(path, name)

Unter diesen pathsollte der Parameter eine Liste sein, in der der zu erweiternde Modulsuchpfad gespeichert ist. nameDas Argument gibt den Namen des zu erweiternden Namespace-Pakets an.

extend_pathDie Funktion gibt eine neue Liste von Pfaden zurück, die die Pfade namefür , die einen Namensraum haben. Wenn die Importanweisung von Python auf nameeinen 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

pkgutilIn diesem Artikel werden die Module in der Python-Standardbibliothek vorgestellt , einschließlich der Verwendung allgemeiner Funktionen iter_modules, get_data, find_loader, walk_packagesusw. 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_pathpkgutil

Ich denke du magst

Origin blog.csdn.net/weixin_40025666/article/details/131226520
Empfohlen
Rangfolge