Документация Python неофициальный перевод
Содержание страницы

31.4. zipimport – Импорт модулей из Zip-архивовzipimport – Import modules from Zip archives

Новое в версии 2.3.

Этот модуль добавляет возможность импортировать модули Python (*.py, *.py[co]) и пакеты из архивов формата ZIP. Обычно нет необходимости использовать модуль zipimport явно; он автоматически используется встроенным механизмом import для элементов sys.path, являющихся путями к ZIP-архивам.

Обычно sys.path – это список имён каталогов в виде строк. Этот модуль также позволяет элементу sys.path быть строкой, именующей ZIP-архив. ZIP-архив может содержать структуру подкаталогов для поддержки импорта пакетов, и можно указать путь внутри архива для импорта только из подкаталога. Например, путь example.zip/lib/ будет импортировать только из подкаталога lib/ внутри архива.

В ZIP-архиве могут присутствовать любые файлы, но для импорта доступны только файлы .py и .py[co]. Импорт динамических модулей (.pyd, .so) запрещён. Обратите внимание, что если архив содержит только .py файлы, Python не будет пытаться изменить архив, добавляя соответствующий файл .pyc или .pyo. Это означает, что если ZIP-архив не содержит файлов .pyc, импорт может быть довольно медленным.

Вызов встроенной функции reload() для модуля, загруженного из ZIP-архива, завершится ошибкой; вряд ли потребуется reload(), поскольку это означало бы, что ZIP-архив был изменён во время выполнения.

ZIP-архивы с комментарием архива в настоящее время не поддерживаются.

См. также

Примечание по применению PKZIP

Документация по формату ZIP-файлов от Фила Каца, создателя формата и используемых алгоритмов.

PEP 273 – Импорт модулей из Zip-архивов

Написан Джеймсом С. Альстромом, который также предоставил реализацию. Python 2.3 соответствует спецификации PEP 273, но использует реализацию, написанную Юстом ван Россумом, которая использует хуки импорта, описанные в PEP 302.

PEP 302 – новые хуки импорта

PEP, добавляющий хуки импорта, которые помогают этому модулю работать.

Этот модуль определяет исключение:

exception zipimport.ZipImportError

Исключение, вызываемое объектами zipimporter. Оно является подклассом ImportError, поэтому его можно перехватывать также как ImportError.

31.4.1. Объекты zipimporterzipimporter Objects

zipimporter – это класс для импорта ZIP-файлов.

class zipimport.zipimporter(archivepath)

Создаёт новый экземпляр zipimporter. archivepath должен быть путём к ZIP-файлу или к конкретному пути внутри ZIP-файла. Например, archivepath со значением foo/bar.zip/lib будет искать модули в каталоге lib внутри ZIP-файла foo/bar.zip (при условии, что он существует).

ZipImportError возбуждается, если archivepath не указывает на валидный ZIP-архив.

find_module(fullname[, path])

Ищет модуль, заданный параметром fullname. fullname должно быть полностью квалифицированным (точечным) именем модуля. Возвращает сам экземпляр zipimporter, если модуль найден, или None в противном случае. Необязательный аргумент path игнорируется – он предусмотрен для совместимости с протоколом импортера.

get_code(fullname)

Возвращает объект кода для указанного модуля. Возбуждает ZipImportError, если модуль не найден.

get_data(pathname)

Возвращает данные, связанные с pathname. Возбуждает IOError, если файл не найден.

get_filename(fullname)

Возвращает значение, которое __file__ получило бы, если бы указанный модуль был импортирован. Возбуждает ZipImportError, если модуль не найден.

Новое в версии 2.7.

get_source(fullname)

Возвращает исходный код указанного модуля. Вызывает ZipImportError, если модуль не найден, возвращает None, если архив содержит модуль, но без исходного кода.

is_package(fullname)

Возвращает True, если модуль, указанный в fullname, является пакетом. Вызывает ZipImportError, если модуль не найден.

load_module(fullname)

Загружает модуль, указанный в fullname. fullname должно быть полностью определённым (с точками) именем модуля. Возвращает импортированный модуль или возбуждает ZipImportError, если он не найден.

archive

Имя файла ZIP-архива, связанного с импортёром, без возможного подпути.

prefix

Подпуть внутри ZIP-файла, где ищутся модули. Для объектов zipimporter, указывающих на корень ZIP-файла, это пустая строка.

Атрибуты archive и prefix, если их объединить через косую черту, равны исходному аргументу archivepath, переданному конструктору zipimporter.

31.4.2. ПримерыExamples

Вот пример импорта модуля из ZIP-архива – обратите внимание, что модуль zipimport явно не используется.

$ 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')  # Добавить .zip файл в начало пути
>>> import jwzthreading
>>> jwzthreading.__file__
'example.zip/jwzthreading.py'