zipimport
— Importer des modules à partir d'archives Zip¶
Code source : Lib/zipimport.py
Ce module ajoute la possibilité d'importer des modules Python (*.py
, *.pyc
) et des paquets depuis des archives au format ZIP. Il n'est généralement pas nécessaire d'utiliser explicitement le module zipimport
; il est automatiquement utilisé par le mécanisme intégré de import
pour les éléments de sys.path
qui sont des chemins vers des archives ZIP.
En général, sys.path
est une liste de noms de répertoires sous forme de chaînes. Ce module permet également à un élément de sys.path
d'être une chaîne nommant une archive de fichier ZIP. L'archive peut contenir une arborescence de répertoires pour prendre en charge les importations de paquets, et un chemin dans l'archive peut être donné pour importer uniquement à partir d'un sous-répertoire. Par exemple, le chemin d'accès example.zip/lib/
importerait uniquement depuis le sous-répertoire lib/
dans l'archive.
Any files may be present in the ZIP archive, but importers are only invoked for
.py
and .pyc
files. ZIP import of dynamic modules
(.pyd
, .so
) is disallowed. Note that if an archive only contains
.py
files, Python will not attempt to modify the archive by adding the
corresponding .pyc
file, meaning that if a ZIP archive
doesn't contain .pyc
files, importing may be rather slow.
Modifié dans la version 3.8: auparavant, les archives ZIP avec un commentaire n'étaient pas prises en charge.
Voir aussi
- PKZIP Application Note
Documentation sur le format de fichier ZIP par Phil Katz, créateur du format et des algorithmes utilisés.
- PEP 273 — Importation de modules depuis des archives ZIP
Écrit par James C. Ahlstrom, qui a également fourni une mise en œuvre. Python 2.3 suit les spécifications de PEP 273, mais utilise une implémentation écrite par Just van Rossum qui utilise les crochets d'importation décrits dans PEP 302.
importlib
— Implémentation du système d'importationPaquet qui définit les protocoles que doivent implémenter tous les objets importateurs.
Ce module définit une exception :
-
exception
zipimport.
ZipImportError
¶ Exception levée par les objets zipimporter. C'est une sous-classe de
ImportError
, donc elle peut être aussi interceptée comme uneImportError
.
Objets zimporter¶
zipimporter
est la classe pour importer des fichiers ZIP.
-
class
zipimport.
zipimporter
(archivepath)¶ Classe d'objets qui importent depuis les archives. Dans le constructeur, archivepath doit être un chemin vers un fichier ZIP, éventuellement augmenté d'un chemin à l'intérieur de l'archive. Par exemple, un archivepath de
foo/bar.zip/lib
cherchera les modules dans le répertoirelib
du fichier ZIPfoo/bar.zip
(à supposer que ce répertoire existe).ZipImportError
est levée si archivepath ne pointe pas vers une archive ZIP valide.-
create_module
(spec)¶ Implémentation de
importlib.abc.Loader.create_module()
. Elle renvoie toujoursNone
, ce qui déclenche le mécanisme standard.Nouveau dans la version 3.10.
-
exec_module
(module)¶ Implémentation de
importlib.abc.Loader.exec_module()
.Nouveau dans la version 3.10.
-
find_loader
(fullname, path=None)¶ Implémentation de
importlib.abc.PathEntryFinder.find_loader()
.Obsolète depuis la version 3.10: utilisez plutôt
find_spec()
.
-
find_module
(fullname, path=None)¶ Recherche un module spécifié par fullname, qui doit être le nom du module entièrement qualifié (avec des points). La valeur renvoyée est l'instance de zipimporter elle-même si le module a été trouvé, ou
None
si ce n'est pas le cas. L'argument optionnel path est ignoré ; il est là pour la compatibilité avec le protocole de l'importateur.Obsolète depuis la version 3.10: utilisez plutôt
find_spec()
.
-
find_spec
(fullname, target=None)¶ Implémentation de
importlib.abc.PathEntryFinder.find_spec()
.Nouveau dans la version 3.10.
-
get_code
(fullname)¶ Renvoie l'objet de code pour le module spécifié. Lève
ZipImportError
si l'importation a échoué.
-
get_data
(pathname)¶ Renvoie les données associées à pathname. Lève
OSError
si le fichier n'a pas été trouvé.
-
get_filename
(fullname)¶ Renvoie la valeur
__file____
qui serait définie si le module spécifié était importé. LèveZipImportError
si l'importation a échoué.Nouveau dans la version 3.1.
-
get_source
(fullname)¶ Renvoie le code source du module spécifié. Lève
ZipImportError
si le module n'a pas pu être trouvé, renvoieNone
si l'archive contient le module, mais n'en a pas la source.
-
is_package
(fullname)¶ Renvoie
True
si le module spécifié par fullname est un paquet. LèveZipImportError
si le module n'a pas pu être trouvé.
-
load_module
(fullname)¶ Charge et renvoie le module spécifié par fullname, qui doit être le nom du module entièrement qualifié (avec des points). Lève
ZipImportError
si l'importation a échoué.Obsolète depuis la version 3.10: utilisez plutôt
exec_module()
.
-
invalidate_caches
()¶ Efface le cache interne des informations sur les fichiers à l'intérieur de l'archive ZIP.
Nouveau dans la version 3.10.
-
archive
¶ Le nom de fichier de l'archive ZIP associé à l'importateur, sans sous-chemin à l'intérieur.
-
prefix
¶ Le sous-chemin du fichier ZIP où les modules sont recherchés. C'est la chaîne vide pour les objets zipimporter qui pointent vers la racine du fichier ZIP.
On a schématiquement
archive
+'/'
+prefix
== archivepath, où archivepath est l'argument donné au constructeurzipimporter
.-
Exemples¶
Voici un exemple qui importe un module d'une archive ZIP — notez que le module zipimport
n'est pas explicitement utilisé.
$ 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'