zipimport — Импорт модулей из Zip-архивов

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


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

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

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

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

См.также

PKZIP Application Note

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

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

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

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

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

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

exception zipimport.ZipImportError

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

Объекты zipimporter

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

class zipimport.zipimporter(archivepath)

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

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

create_module(spec)

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

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

exec_module(module)

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

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

find_loader(fullname, path=None)

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

Не рекомендуется, начиная с версии 3.10: Вместо этого используйте find_spec().

find_module(fullname, path=None)

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

Не рекомендуется, начиная с версии 3.10: Вместо этого используйте find_spec().

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

load_module(fullname)

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

Не рекомендуется, начиная с версии 3.10: Вместо этого используйте exec_module().

invalidate_caches()

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

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

archive

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

prefix

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

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

Примеры

Вот пример импорта модуля из 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'
Вернуться на верх