zipimport — Import modules from Zip archives

Código-fonte: Lib/zipimport.py


Este módulo adiciona a capacidade de importar módulos Python (*.py, *.pyc) e pacotes de arquivos em formato ZIP. Normalmente, não é necessário usar o módulo zipimport explicitamente; ele é usado automaticamente pelo mecanismo embutido no import para itens sys.path que são caminhos para arquivos ZIP.

Normalmente, sys.path é uma lista de nomes de diretórios como strings. Este módulo também permite que um item de sys.path seja uma string que nomeia um arquivo ZIP. O arquivo ZIP pode conter uma estrutura de subdiretório para suportar importações de pacotes, e um caminho dentro do arquivo pode ser especificado para importar apenas de um subdiretório. Por exemplo, o caminho example.zip/lib/ importaria apenas do subdiretório lib/ dentro do arquivo.

Quaisquer arquivos podem estar presentes no arquivo ZIP, mas os importadores são invocados apenas para os arquivos .py e .pyc. A importação ZIP de módulos dinâmicos (.pyd, .so) não é permitida. Observe que, se um arquivo contiver apenas arquivos .py, o Python não tentará modificá-lo adicionando o arquivo .pyc correspondente, o que significa que, se um arquivo ZIP não contiver arquivos .pyc, a importação poderá ser bastante lenta.

Alterado na versão 3.8: Anteriormente, não havia suporte para arquivos ZIP com um comentário de arquivo.

Ver também

Nota da aplicação PKZIP

Documentação do formato de arquivo ZIP feita por Phil Katz, criador do formato e dos algoritmos usados.

PEP 273 - Import Modules from Zip Archives

Escrito por James C. Ahlstrom, que também forneceu uma implementação. O Python 2.3 segue a especificação em PEP 273, mas usa uma implementação escrita por Just van Rossum que utiliza os ganchos de importação descritos em PEP 302.

PEP 302 - New Import Hooks

The PEP to add the import hooks that help this module work.

Este módulo define uma exceção:

exception zipimport.ZipImportError

Exceção levantada por objetos zipimporter. É uma subclasse de ImportError, portanto, também pode ser capturada como ImportError.

Objetos zipimporter

zipimporter é a classe para importar arquivos ZIP.

class zipimport.zipimporter(archivepath)

Cria uma nova instância de zipimporter. archivepath deve ser um caminho para um arquivo ZIP ou para um caminho específico dentro de um arquivo ZIP. Por exemplo, um archivepath de foo/bar.zip/lib procurará módulos no diretório lib dentro do arquivo ZIP foo/bar.zip (desde que exista).

ZipImportError é levantada se archivepath não apontar para um arquivo 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)

Return the code object for the specified module. Raise ZipImportError if the module couldn’t be found.

get_data(pathname)

Retorna os dados associados a pathname. Levanta OSError se o arquivo não for encontrado.

Alterado na versão 3.3: IOError costumava ser levantado em vez do OSError.

get_filename(fullname)

Return the value __file__ would be set to if the specified module was imported. Raise ZipImportError if the module couldn’t be found.

Novo na versão 3.1.

get_source(fullname)

Retorna o código-fonte do módulo especificado. Levanta ZipImportError se o módulo não puder ser encontrado, e retorna None se o arquivo contiver o módulo, mas não tiver o código-fonte para ele.

is_package(fullname)

Retorna True se o módulo especificado por fullname é um pacote. Levanta ZipImportError se o módulo não pode ser localizado.

load_module(fullname)

Load the module specified by fullname. fullname must be the fully qualified (dotted) module name. It returns the imported module, or raises ZipImportError if it wasn’t found.

archive

O nome do arquivo ZIP associado ao importador, sem um possível subcaminho.

prefix

O subcaminho dentro do arquivo ZIP onde os módulos são pesquisados. Esta é a string vazia para objetos zipimporter que apontam para a raiz do arquivo ZIP.

Os atributos archive e prefix, quando combinados com uma barra, são iguais ao argumento original archivepath fornecido ao construtor da zipimporter.

Exemplos

Aqui está um exemplo que importa um módulo de um arquivo ZIP - observe que o módulo zipimport não é usado explicitamente.

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