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

Cualquier archivo puede estar presente en el archivo ZIP, pero los
importadores solo son invocados para archivos ".py" y ".pyc". La
importación ZIP de módulos dinámicos (".pyd", ".so") no está
permitida. Cabe señalar que si un archivo ZIP contiene solamente
archivos ".py", Python no intentará modificar el archivo agregando los
correspondientes archivos ".pyc", esto quiere decir que si un archivo
ZIP no contiene archivos ".pyc" la importación puede ser algo lenta.

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" used to be raised, it is
      now an alias of "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'
