zipimport — Импорт модулей из архивов ZIP
Этот модуль добавляет возможность импорта модулей 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, импорт может быть довольно медленным.
Архивы ZIP с комментариями пока не поддерживаются.
См. также
- PKZIP Application Note
-
Документация по формату ZIP от Фила Кэтца, создателя формата и алгоритмов, используемых в нём.
- PEP 273 - Import Modules from Zip Archives
-
Написано Джеймсом К. Элстромом, который также предоставил реализацию. Python 2.3 следует спецификации PEP 273, но использует реализацию, написанную Джастом ван Россумом, которая использует механизмы импорта, описанные в PEP 302.
- PEP 302 - New Import Hooks
-
PEP, добавляющий механизмы импорта, которые помогают этому модулю работать.
Этот модуль определяет исключение:
-
exception zipimport.ZipImportError -
Исключение, генерируемое объектами zipimporter. Оно является подклассом
ImportError, поэтому его можно перехватывать какImportErrorтоже.
31.1.1. Объекты zipimporter
zipimporter — это класс для импорта файлов ZIP.
-
class zipimport.zipimporter(archivepath) -
Создаёт новый экземпляр zipimporter. archivepath должен быть путём к файлу ZIP или к определённому пути внутри файла ZIP. Например, archivepath
foo/bar.zip/libбудет искать модули в каталогеlibвнутри файла ZIPfoo/bar.zip(при условии, что он существует).ZipImportErrorгенерируется, если archivepath не указывает на действительный архив ZIP.-
find_module(fullname[, path]) -
Ищет модуль, заданный параметром fullname. fullname должен быть полным (с точками) именем модуля. Возвращает экземпляр zipimporter, если модуль найден, или
None, если не найден. Необязательный аргумент path игнорируется — он нужен для совместимости с протоколом импортера.
-
get_code(fullname) -
Возвращает объект кода для указанного модуля. Генерирует
ZipImportError, если модуль не найден.
-
get_data(pathname) -
Возвращает данные, связанные с pathname. Генерирует
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. -
31.1.2. Примеры
Вот пример импорта модуля из архива 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'
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.6/library/zipimport.html