This document is for an old version of Python that is no longer supported. You should upgrade and read the Python documentation for the current stable release.

# 31.4. `zipimport` — Importer des modules à partir d’archives Zip

Nouveau dans la version 2.3.

This module adds the ability to import Python modules (`*.py`, `*.py[co]`) and packages from ZIP-format archives. It is usually not needed to use the `zipimport` module explicitly; it is automatically used by the built-in `import` mechanism for `sys.path` items that are paths to ZIP archives.

Typiquement, `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 ZIP peut contenir une structure de sous-répertoire pour prendre en charge les importations de paquets, et un chemin dans l’archive peut être spécifié 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 only files `.py` and `.py[co]` are available for import. 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` or `.pyo` file, meaning that if a ZIP archive doesn’t contain `.pyc` files, importing may be rather slow.

Using the built-in `reload()` function will fail if called on a module loaded from a ZIP archive; it is unlikely that `reload()` would be needed, since this would imply that the ZIP has been altered during runtime.

ZIP archives with an archive comment are currently not supported.

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 - Import Modules from Zip Archives

  Written by James C. Ahlstrom, who also provided an implementation. Python 2.3 follows the specification in PEP 273, but uses an implementation written by Just van Rossum that uses the import hooks described in PEP 302.

PEP 302 — Nouveaux crochets d’importation

  Le PEP pour ajouter les crochets d’importation qui aident ce module à fonctionner.

Ce module définit une exception :

exception `zipimport.``ZipImportError`

  Exception levée par les objets zipimporter. C’est une sous-classe de `ImportError`, donc il peut être pris comme `ImportError`, aussi.

## 31.4.1. Objets zimporter

`zipimporter` est la classe pour importer des fichiers ZIP.

class `zipimport.``zipimporter`(archivepath)

  Créez une nouvelle instance de zipimporter. archivepath doit être un chemin vers un fichier ZIP, ou vers un chemin spécifique dans un fichier ZIP. Par exemple, un archivepath de `foo/bar.zip/lib` cherchera les modules dans le répertoire `lib` du fichier ZIP `foo/bar.zip` (si celui-ci existe).

  `ZipImportError` est levée si archivepath ne pointe pas vers une archive ZIP valide.

  `find_module`(fullname[, path])

    Rechercher un module spécifié par fullname. fullname doit être le nom du module entièrement qualifié (dotted). Elle retourne l’instance 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.

  `get_code`(fullname)

    Retourne l’objet de code pour le module spécifié. Lève `ZipImportError` si le module n’a pas pu être trouvé.

  `get_data`(pathname)

    Return the data associated with pathname. Raise `IOError` if the file wasn’t found.

  `get_filename`(fullname)

    Renvoie la valeur `__file____` qui serait définie si le module spécifié était importé. Lève `ZipImportError` si le module n’a pas pu être trouvé.

  Nouveau dans la version 2.7.

  `get_source`(fullname)

    Renvoie le code source du module spécifié. Lève `ZipImportError` si le module n’a pas pu être trouvé, renvoie `None` 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ève `ZipImportError` si le module n’a pas pu être trouvé.

  `load_module`(fullname)

    Charge le module spécifié par fullname. fullname doit être le nom du module entièrement qualifié (dotted). Il renvoie le module importé, ou augmente `ZipImportError` s’il n’a pas été trouvé.

  `archive`

    Le nom de fichier de l’archive ZIP associé à l’importateur, sans sous-chemin possible.

  `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.

  Les attributs `archive` et `prefix`, lorsqu’ils sont combinés avec une barre oblique, égalent l’argument original archivepath donné au constructeur `zipimporter`.

## 31.4.2. 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'