Документация 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. Импорт динамических модулей из ZIP (.pyd, .so) запрещён. Обратите внимание, что если архив содержит только .py файлы, Python не будет пытаться изменить архив, добавляя соответствующий файл .pyc, то есть если ZIP-архив не содержит файлов .pyc, импорт может быть довольно медленным.

Изменено в версии 3.15: Поддерживаются записи zip-файлов, сжатые с помощью Zstandard (zstd).

Изменено в версии 3.13: ZIP64 поддерживается

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

См. также

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

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

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

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

importlib – Реализация механизма импорта

Пакет, предоставляющий соответствующие протоколы для реализации всеми импортёрами.

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

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-архив.

Изменено в версии 3.12: Методы find_loader() и find_module(), устаревшие в 3.10, теперь удалены. Используйте find_spec() вместо них.

create_module(spec)

Реализация importlib.abc.Loader.create_module(), которая возвращает None для явного запроса семантики по умолчанию.

Добавлено в версии 3.10.

exec_module(module)

Реализация importlib.abc.Loader.exec_module().

Добавлено в версии 3.10.

find_spec(fullname, target=None)

Реализация importlib.abc.PathEntryFinder.find_spec().

Добавлено в версии 3.10.

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, если модуль не найден.

invalidate_caches()

Очищает внутренний кеш информации о файлах, найденных в ZIP-архиве.

Добавлено в версии 3.10.

archive

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

prefix

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

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

ПримерыExamples

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

$ unzip -l example_archive.zip
Archive:  example_archive.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
     8467  01-01-00 12:30   example.py
 --------                   -------
     8467                   1 file
>>> import sys
>>> # Добавляет архив в начало пути поиска модулей.
>>> sys.path.insert(0, 'example_archive.zip')
>>> import example
>>> example.__file__
'example_archive.zip/example.py'