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-Mechanismen

Paket, 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 als ImportError abgefangen 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/lib nach Modulen im Verzeichnis lib innerhalb der ZIP-Datei foo/bar.zip (vorausgesetzt, es existiert).

ZipImportError wird ausgelöst, wenn archivepath nicht auf ein gültiges ZIP-Archiv verweist.

Geändert in Version 3.12: Die Methoden find_loader() und find_module(), die in Version 3.10 als veraltet markiert wurden, sind nun entfernt. Verwenden Sie stattdessen find_spec().

create_module(spec)

Implementierung von importlib.abc.Loader.create_module(), die None zurü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 ZipImportError aus, wenn das Modul nicht importiert werden konnte.

get_data(pathname)

Gibt die Daten zurück, die mit pathname verknüpft sind. Löst OSError aus, wenn die Datei nicht gefunden wurde.

Geändert in Version 3.3: IOError wurde früher ausgelöst, es ist jetzt ein Alias von OSError.

get_filename(fullname)

Gibt den Wert zurück, der `__file__` zugewiesen würde, wenn das angegebene Modul importiert würde. Löst ZipImportError aus, 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 ZipImportError aus, wenn das Modul nicht gefunden werden konnte, gibt None zurück, wenn das Archiv das Modul enthält, aber keine Quelle dafür hat.

is_package(fullname)

Gibt True zurück, wenn das durch fullname angegebene Modul ein Paket ist. Löst ZipImportError aus, 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 ZipImportError aus.

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 archive und prefix ergeben zusammen mit einem Schrägstrich den ursprünglichen archivepath-Argument, das dem Konstruktor von zipimporter ü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'