# `zipimport` — Importar módulos desde archivos zip

Código fuente: Lib/zipimport.py

Este módulo añade la capacidad de importar módulos de Python (`*.py`, `*.pyc`) y paquetes de archivos de formato ZIP. Por lo general, no es necesario utilizar el módulo `zipimport` explícitamente; se utiliza automáticamente por el mecanismo incorporado `import` para los ítems `sys.path` que son rutas a archivos ZIP.

Típicamente `sys.path` es una lista de cadenas con nombres de directorios. Este módulo también permite a un elemento de `sys.path` ser una cadena con la que se nombre a un archivo ZIP. El archivo ZIP puede contener una estructura de subdirectorios para soportar la importación de paquetes, y una ruta dentro del archivo puede ser especificada para únicamente importar desde un subdirectorio. Por ejemplo, la ruta `example.zip/lib/` sólo importaría desde el subdirectorio `lib/` dentro del archivo.

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.

Distinto en la versión 3.8: Anteriormente, los archivos ZIP con un comentario de archivo no eran compatibles.

Ver también

PKZIP Nota de aplicación

  Documentación sobre el formato de archivo ZIP por Phil Katz, el creador del formato y algoritmos utilizados.

PEP 273 - Importar módulos de archivos Zip

  Escrito por James C. Ahlstrom, quien también proporcionó una implementación. Python 2.3 sigue la especificación en PEP 273, pero utiliza una implementación escrita por Just van Rossum que utiliza los ganchos importados descritos en PEP 302.

`importlib` - La implementación de la maquinaria de importación

  El paquete proporciona los protocolos relevantes para que los implementen todos los importadores.

Este módulo define una excepción:

exception `zipimport.``ZipImportError`

  Excepción lanzada por objetos zipimporter. Es una subclase de `ImportError`, por lo que también puede ser capturada como `ImportError`.

## Objetos zipimporter

`zipimporter` es la clase para importar archivos ZIP.

class `zipimport.``zipimporter`(archivepath)

  Crea una nueva instancia zipimporter. archivepath debe ser una ruta a un archivo ZIP, o a una ruta específica dentro de un archivo ZIP. Por ejemplo, un archivepath de `foo/bar.zip/lib` buscará módulos en el directorio `lib` dentro del archivo ZIP `foo/bar.zip` (siempre que exista).

  `ZipImportError` es lanzada si archivepath no apunta a un archivo ZIP válido.

  `create_module`(spec)

    Implementación de `importlib.abc.Loader.create_module()` que retorna `None` para solicitar explícitamente la semántica predeterminada.

    Nuevo en la versión 3.10.

  `exec_module`(module)

    Implementación de `importlib.abc.Loader.exec_module()`.

    Nuevo en la versión 3.10.

  `find_loader`(fullname, path=None)

    Una implementación de `importlib.abc.PathEntryFinder.find_loader()`.

    Obsoleto desde la versión 3.10: Utilizar en su lugar `find_spec()`.

  `find_module`(fullname, path=None)

    Busca un módulo especificado por fullname. fullname debe ser el nombre completo del módulo (punteado). Retorna la propia instancia zipimporter si el módulo fue encontrado, o `None` si no. El argumento opcional path es ignorado — está ahí por compatibilidad con el protocolo del importador.

    Obsoleto desde la versión 3.10: Utilizar en su lugar `find_spec()`.

  `find_spec`(fullname, target=None)

    Una implementación de `importlib.abc.PathEntryFinder.find_spec()`.

    Nuevo en la versión 3.10.

  `get_code`(fullname)

    Retorna el objeto de código para el módulo especificado. Lanza `ZipImportError` si el módulo no se pudo importar.

  `get_data`(pathname)

    Retorna los datos asociados con pathname. Lanza `OSError` si el archivo no fue encontrado.

    Distinto en la versión 3.3: `IOError` solía lanzarse en lugar de `OSError`.

  `get_filename`(fullname)

    Retorna el valor que se le habría asignado a `__file__` si el módulo especificado fue importado. Lanza `ZipImportError` si el módulo no se pudo importar.

    Nuevo en la versión 3.1.

  `get_source`(fullname)

    Retorna el código fuente para el módulo especificado. Lanza `ZipImportError` si el módulo no pudo ser encontrado, retorna `None` si el archivo contiene al módulo, pero no tiene fuente para ello.

  `is_package`(fullname)

    Retorna `True` si el módulo especificado por fullname es un paquete. Lanza `ZipImportError` si el módulo no pudo ser encontrado.

  `load_module`(fullname)

    Carga el módulo especificado por fullname. fullname debe ser el nombre completo de módulo (punteado). Retorna el módulo importado, o lanza `ZipImportError` si no fue encontrado.

    Obsoleto desde la versión 3.10: Utilizar en su lugar `exec_module()`.

  `invalidate_caches`()

    Limpia la caché interna de información sobre los archivos que se encuentran dentro del archivo ZIP.

    Nuevo en la versión 3.10.

  `archive`

    El nombre de archivo del archivo ZIP asociado del importador, sin una posible sub-ruta.

  `prefix`

    La sub-ruta dentro del archivo ZIP donde se buscan los módulos. Esta es la cadena vacía para objetos zipimporter la cual apunta a la raíz del archivo ZIP.

  Los atributos `archive` y `prefix`, cuando son combinados con una barra diagonal, son iguales al argumento original archivepath dado al constructor `zipimporter`.

## Ejemplos

Este es un ejemplo que importa un módulo de un archivo ZIP - tenga en cuenta que el módulo `zipimport` no está usado explícitamente.

    $ 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'