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

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

Исходный код: Lib/zipimport.py


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

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

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

Изменено в версии 3.8: Ранее ZIP-архивы с комментарием архива не поддерживались.

См. также

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

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

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

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

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

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

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

exception zipimport.ZipImportError

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

Объекты 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. Возбуждает OSError, если файл не найден.

Изменено в версии 3.3: IOError раньше вызывалось вместо OSError.

get_filename(fullname)

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

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

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.

Примеры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')  # Add .zip file to front of path
>>> import jwzthreading
>>> jwzthreading.__file__
'example.zip/jwzthreading.py'