zipimport — Module aus Zip-Archiven importieren¶
Quellcode: Lib/zipimport.py
Dieses Modul erweitert die Möglichkeit, Python-Module (*.py, *.pyc) und Pakete aus Archiven im ZIP-Format zu importieren. Es ist normalerweise nicht notwendig, das Modul zipimport explizit zu verwenden; es wird automatisch vom eingebauten import-Mechanismus für sys.path-Elemente verwendet, die Pfade zu ZIP-Archiven sind.
Normalerweise ist sys.path eine Liste von Verzeichnissen als Zeichenketten. Dieses Modul erlaubt es auch, dass ein Element von sys.path eine Zeichenkette ist, die eine ZIP-Datei benennt. Das ZIP-Archiv kann eine Unterverzeichnisstruktur enthalten, um Paketimporte zu unterstützen, und ein Pfad innerhalb des Archivs kann angegeben werden, um nur aus einem Unterverzeichnis zu importieren. Zum Beispiel würde der Pfad example.zip/lib/ nur aus dem Unterverzeichnis lib/ innerhalb des Archivs importieren.
Beliebige Dateien können im ZIP-Archiv vorhanden sein, aber Importer werden nur für .py- und .pyc-Dateien aufgerufen. ZIP-Import von dynamischen Modulen (.pyd, .so) ist nicht erlaubt. Beachten Sie, dass Python, wenn ein Archiv nur .py-Dateien enthält, nicht versuchen wird, das Archiv durch Hinzufügen der entsprechenden .pyc-Datei zu modifizieren, was bedeutet, dass der Import relativ langsam sein kann, wenn ein ZIP-Archiv keine .pyc-Dateien enthält.
Geändert in Version 3.13: ZIP64 wird unterstützt
Geändert in Version 3.8: Zuvor wurden ZIP-Archive mit einem Archivkommentar nicht unterstützt.
Siehe auch
- PKZIP Application Note
Dokumentation zum ZIP-Dateiformat von Phil Katz, dem Erfinder des Formats und der verwendeten Algorithmen.
- PEP 273 - Module aus Zip-Archiven importieren
Geschrieben von James C. Ahlstrom, der auch eine Implementierung zur Verfügung stellte. Python 2.3 folgt der Spezifikation in PEP 273, verwendet aber eine von Just van Rossum geschriebene Implementierung, die die in PEP 302 beschriebenen Import-Hooks verwendet.
importlib— Die Implementierung der Import-MechanismenPaket, das die relevanten Protokolle für alle Importer zur Implementierung bereitstellt.
Dieses Modul definiert eine Ausnahme
- exception zipimport.ZipImportError¶
Ausnahme, die von zipimporter-Objekten ausgelöst wird. Sie ist eine Unterklasse von
ImportError, kann also auch alsImportErrorabgefangen werden.
zipimporter-Objekte¶
zipimporter ist die Klasse für den Import von ZIP-Dateien.
- class zipimport.zipimporter(archivepath)¶
Erstellt eine neue zipimporter-Instanz. archivepath muss ein Pfad zu einer ZIP-Datei oder zu einem bestimmten Pfad innerhalb einer ZIP-Datei sein. Zum Beispiel sucht ein archivepath von
foo/bar.zip/libnach Modulen im Verzeichnislibinnerhalb der ZIP-Dateifoo/bar.zip(vorausgesetzt, es existiert).ZipImportErrorwird ausgelöst, wenn archivepath nicht auf ein gültiges ZIP-Archiv verweist.Geändert in Version 3.12: Die Methoden
find_loader()undfind_module(), die in Version 3.10 als veraltet markiert wurden, sind nun entfernt. Verwenden Sie stattdessenfind_spec().- create_module(spec)¶
Implementierung von
importlib.abc.Loader.create_module(), dieNonezurückgibt, um explizit die Standardsemantik anzufordern.Hinzugefügt in Version 3.10.
- exec_module(module)¶
Implementierung von
importlib.abc.Loader.exec_module().Hinzugefügt in Version 3.10.
- find_spec(fullname, target=None)¶
Eine Implementierung von
importlib.abc.PathEntryFinder.find_spec().Hinzugefügt in Version 3.10.
- get_code(fullname)¶
Gibt das Code-Objekt für das angegebene Modul zurück. Löst
ZipImportErroraus, wenn das Modul nicht importiert werden konnte.
- get_data(pathname)¶
Gibt die Daten zurück, die mit pathname verknüpft sind. Löst
OSErroraus, wenn die Datei nicht gefunden wurde.
- get_filename(fullname)¶
Gibt den Wert zurück, der `__file__` zugewiesen würde, wenn das angegebene Modul importiert würde. Löst
ZipImportErroraus, wenn das Modul nicht importiert werden konnte.Hinzugefügt in Version 3.1.
- get_source(fullname)¶
Gibt den Quellcode für das angegebene Modul zurück. Löst
ZipImportErroraus, wenn das Modul nicht gefunden werden konnte, gibtNonezurück, wenn das Archiv das Modul enthält, aber keine Quelle dafür hat.
- is_package(fullname)¶
Gibt
Truezurück, wenn das durch fullname angegebene Modul ein Paket ist. LöstZipImportErroraus, wenn das Modul nicht gefunden werden konnte.
- load_module(fullname)¶
Lädt das durch fullname angegebene Modul. fullname muss der vollqualifizierte (punktgetrennte) Modulname sein. Gibt bei Erfolg das importierte Modul zurück, löst bei Fehlschlag
ZipImportErroraus.Veraltet seit Version 3.10, wird in Version 3.15 entfernt: Verwenden Sie stattdessen
exec_module().
- invalidate_caches()¶
Löscht den internen Cache mit Informationen über im ZIP-Archiv gefundene Dateien.
Hinzugefügt in Version 3.10.
- archive¶
Der Dateiname der zugehörigen ZIP-Datei des Importers, ohne einen möglichen Unterpfad.
- prefix¶
Der Unterpfad innerhalb der ZIP-Datei, in dem nach Modulen gesucht wird. Dies ist eine leere Zeichenkette für zipimporter-Objekte, die auf das Stammverzeichnis der ZIP-Datei verweisen.
Die Attribute
archiveundprefixergeben zusammen mit einem Schrägstrich den ursprünglichen archivepath-Argument, das dem Konstruktor vonzipimporterübergeben wurde.
Beispiele¶
Hier ist ein Beispiel, das ein Modul aus einem ZIP-Archiv importiert – beachten Sie, dass das Modul zipimport nicht explizit verwendet wird.
$ unzip -l example_archive.zip
Archive: example_archive.zip
Length Date Time Name
-------- ---- ---- ----
8467 01-01-00 12:30 example.py
-------- -------
8467 1 file
>>> import sys
>>> # Add the archive to the front of the module search path
>>> sys.path.insert(0, 'example_archive.zip')
>>> import example
>>> example.__file__
'example_archive.zip/example.py'