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 únicamente los archivos .py
y .pyc
están disponibles para importar. 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.
- PEP 302 - Nuevos ganchos de importación
El PEP para agregar los ganchos de importación que ayudan a este módulo a funcionar.
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 comoImportError
.
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 directoriolib
dentro del archivo ZIPfoo/bar.zip
(siempre que exista).ZipImportError
es lanzada si archivepath no apunta a un archivo ZIP válido.-
find_module
(fullname[, path])¶ Search for a module specified by fullname. fullname must be the fully qualified (dotted) module name. It returns the zipimporter instance itself if the module was found, or
None
if it wasn’t. The optional path argument is ignored—it’s there for compatibility with the importer protocol.
-
get_code
(fullname)¶ Retorna el objeto de código para el módulo especificado. Lanza
ZipImportError
si el módulo no pudo ser encontrado.
-
get_data
(pathname)¶ Retorna los datos asociados con pathname. Lanza
OSError
si el archivo no fue encontrado.
-
get_filename
(fullname)¶ Retorna el valor que se le habría asignado a
__file__
si el módulo especificado fue importado. LanzaZipImportError
si el módulo no pudo ser encontrado.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, retornaNone
si el archivo no 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. LanzaZipImportError
si el módulo no pudo ser encontrado.
-
load_module
(fullname)¶ Cargue 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.
-
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
yprefix
, cuando son combinados con una barra diagonal, son iguales al argumento original archivepath dado al constructorzipimporter
.-
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'