zipimport
— Импорт модулей из Zip-архивов¶
Источник: 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.13: Поддерживается ZIP64
Изменено в версии 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-архив.Изменено в версии 3.12: Методы
find_loader()
иfind_module()
, устаревшие в версии 3.10, теперь удалены. Вместо них используйтеfind_spec()
.- create_module(spec)¶
Реализация
importlib.abc.Loader.create_module()
, которая возвращаетNone
для явного запроса семантики по умолчанию.Added in version 3.10.
- exec_module(module)¶
Реализация
importlib.abc.Loader.exec_module()
.Added in version 3.10.
- find_spec(fullname, target=None)¶
Реализация
importlib.abc.PathEntryFinder.find_spec()
.Added in version 3.10.
- get_code(fullname)¶
Возвращает объект кода для указанного модуля. Возвращает
ZipImportError
, если модуль не удалось импортировать.
- get_data(pathname)¶
Возвращает данные, связанные с pathname. Возвращает
OSError
, если файл не найден.
- get_filename(fullname)¶
Возвращает значение
__file__
, которое было бы установлено, если бы указанный модуль был импортирован. Возвращает значениеZipImportError
, если модуль не удалось импортировать.Added in version 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-архиве.
Added in version 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'