zipimport — Importera moduler från zip-arkiv

Källkod: Lib/zipimport.py


Denna modul ger möjlighet att importera Python-moduler (*.py, *.pyc) och paket från ZIP-formatarkiv. Det är vanligtvis inte nödvändigt att använda zipimport-modulen explicit; den används automatiskt av den inbyggda import-mekanismen för sys.path-objekt som är sökvägar till ZIP-arkiv.

Vanligtvis är sys.path en lista med katalognamn i form av strängar. Den här modulen tillåter också att ett objekt i sys.path är en sträng som namnger ett ZIP-filarkiv. ZIP-arkivet kan innehålla en underkatalogstruktur för att stödja paketimport, och en sökväg i arkivet kan anges för att endast importera från en underkatalog. Till exempel skulle sökvägen example.zip/lib/ endast importera från underkatalogen lib/ i arkivet.

Alla filer kan finnas i ZIP-arkivet, men importörer anropas endast för .py- och .pyc-filer. ZIP-import av dynamiska moduler (.pyd, .so) är inte tillåten. Observera att om ett arkiv endast innehåller .py-filer kommer Python inte att försöka modifiera arkivet genom att lägga till motsvarande .pyc-fil, vilket innebär att om ett ZIP-arkiv inte innehåller .pyc-filer kan importen gå ganska långsamt.

Ändrad i version 3.13: ZIP64 stöds

Ändrad i version 3.8: Tidigare stöddes inte ZIP-arkiv med en arkivkommentar.

Se även

PKZIP Application Note

Dokumentation om ZIP-filformatet av Phil Katz, skaparen av formatet och algoritmerna som används.

PEP 273 - Importera moduler från zip-arkiv

Skriven av James C. Ahlstrom, som också tillhandahöll en implementation. Python 2.3 följer specifikationen i PEP 273, men använder en implementation skriven av Just van Rossum som använder importkrokarna som beskrivs i PEP 302.

importlib - Implementeringen av importmaskineriet

Paket med de relevanta protokoll som alla importörer ska genomföra.

Denna modul definierar ett undantag:

exception zipimport.ZipImportError

Undantag som orsakas av zipimporter-objekt. Det är en underklass till ImportError, så det kan också fångas som ImportError.

zipimporter objekt

zipimporter är en klass för import av ZIP-filer.

class zipimport.zipimporter(archivepath)

Skapa en ny zipimporter-instans. archivepath måste vara en sökväg till en ZIP-fil eller till en specifik sökväg inom en ZIP-fil. Till exempel kommer en archivepathfoo/bar.zip/lib att leta efter moduler i katalogen lib i ZIP-filen foo/bar.zip (förutsatt att den finns).

ZipImportError uppstår om archivepath inte pekar på ett giltigt ZIP-arkiv.

Ändrad i version 3.12: Metoderna find_loader() och find_module(), föråldrade i 3.10, är nu borttagna. Använd find_spec() istället.

create_module(spec)

Implementering av importlib.abc.Loader.create_module() som returnerar None för att uttryckligen begära standardsemantik.

Tillagd i version 3.10.

exec_module(module)

Implementering av importlib.abc.Loader.exec_module().

Tillagd i version 3.10.

find_spec(fullname, target=None)

En implementation av importlib.abc.PathEntryFinder.find_spec().

Tillagd i version 3.10.

get_code(fullname)

Returnerar kodobjektet för den angivna modulen. Utlöser ZipImportError om modulen inte kunde importeras.

get_data(pathname)

Returnerar data som är associerade med pathname. Utlös OSError om filen inte hittades.

Ändrad i version 3.3: IOError användes tidigare, nu är det ett alias för OSError.

get_filename(fullname)

Returnerar värdet __file__ skulle sättas till om den angivna modulen importerades. Utlöser ZipImportError om modulen inte kunde importeras.

Tillagd i version 3.1.

get_source(fullname)

Returnerar källkoden för den angivna modulen. Utlös ZipImportError om modulen inte kunde hittas, returnera None om arkivet innehåller modulen, men inte har någon källkod för den.

is_package(fullname)

Returnerar True om modulen som anges av fullname är ett paket. Utlöser ZipImportError om modulen inte kunde hittas.

load_module(fullname)

Laddar den modul som anges av fullname. fullname måste vara det fullständigt kvalificerade (prickade) modulnamnet. Returnerar den importerade modulen vid framgång, ger upphov till ZipImportError vid misslyckande.

Deprecated since version 3.10, will be removed in version 3.15: Använd exec_module() istället.

invalidate_caches()

Rensa den interna cacheminnet för information om filer som finns i ZIP-arkivet.

Tillagd i version 3.10.

archive

Filnamnet på importörens tillhörande ZIP-fil, utan eventuell underväg.

prefix

Den underväg i ZIP-filen där moduler söks. Detta är den tomma strängen för zipimporter-objekt som pekar på roten till ZIP-filen.

Attributen archive och prefix, när de kombineras med ett snedstreck, motsvarar det ursprungliga argumentet archivepath som ges till konstruktören zipimporter.

Exempel

Här är ett exempel på import av en modul från ett ZIP-arkiv - notera att modulen zipimport inte används explicit.

$ unzip -l example.zip
Archive:  example.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
     8467  11-26-02 22:30   jwzthreading.py
 --------                   -------
     8467                   1 file
$ ./python
Python 2.3 (#1, Aug 1 2003, 19:54:32)
>>> import sys
>>> sys.path.insert(0, 'example.zip')  # Add .zip file to front of path
>>> import jwzthreading
>>> jwzthreading.__file__
'example.zip/jwzthreading.py'