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 - Импорт модулей из архивов ZIP
-
Написана Джеймсом К. Альстромом, который также предоставил реализацию. Python 2.3 следует спецификации PEP 273, но использует реализацию, написанную Джастом ван Россумом, которая использует механизмы импорта, описанные в PEP 302.
- PEP 302 - Новые механизмы импорта
-
PEP для добавления механизмов импорта, которые помогают работе этого модуля.
Этот модуль определяет исключение:
-
exception zipimport.ZipImportError -
Исключение, генерируемое объектами zipimporter. Это подкласс
ImportError, поэтому его также можно перехватить какImportError.
Объекты 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. -
Примеры
Вот пример импорта модуля из архива 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.7/library/zipimport.html