zipimport — Импорт модулей из архивов ZIP
Новая в версии 2.3.
Этот модуль добавляет возможность импортировать модули Python (*.py, *.py[co]) и пакеты из архивов в формате ZIP. Обычно нет необходимости явно использовать модуль zipimport; он автоматически используется встроенным механизмом import для элементов sys.path, которые являются путями к архивам ZIP.
Обычно sys.path представляет собой список имён директорий в виде строк. Этот модуль также позволяет элементом sys.path быть строкой, указывающей на архив ZIP. Архив ZIP может содержать структуру подкаталогов, чтобы поддерживать импорт пакетов, и путь внутри архива может быть указан для импорта только из подкаталога. Например, путь example.zip/lib/ будет импортировать только из подкаталога lib/ внутри архива.
В архиве ZIP могут присутствовать любые файлы, но для импорта доступны только файлы .py и .py[co]. Запрещён импорт динамических модулей (.pyd, .so) из ZIP. Обратите внимание, что если архив содержит только файлы .py, Python не будет пытаться изменить архив, добавив соответствующие файлы .pyc или .pyo, что означает, что если архив ZIP не содержит файлов .pyc, импорт может быть довольно медленным.
Использование встроенной функции reload() завершится ошибкой, если она вызвана для модуля, загруженного из архива ZIP; вряд ли понадобится reload(), поскольку это подразумевает, что ZIP был изменён во время выполнения.
Архивы ZIP с комментариями в данный момент не поддерживаются.
См. также
- PKZIP Application Note
-
Документация по формату файлов ZIP, написанная Филом Кэтзом, создателем формата и используемых алгоритмов.
- PEP 273 - Импорт модулей из архивов ZIP
-
Написано Джеймсом С. Аhlstrom, который также предоставил реализацию. Python 2.3 следует спецификации PEP 273, но использует реализацию, написанную Джастом ван Россумом, которая использует механизмы импорта, описанные в PEP 302.
- PEP 302 - Новые механизмы импорта
-
PEP по добавлению механизмов импорта, которые помогают этому модулю работать.
Этот модуль определяет исключение:
-
exception zipimport.ZipImportError -
Исключение, генерируемое объектами zipimporter. Это подкласс
ImportError, поэтому его можно перехватывать какImportErrorтоже.
1. Объекты zipimporter
zipimporter — класс для импорта файлов ZIP.
-
class zipimport.zipimporter(archivepath) -
Создаёт новый экземпляр zipimporter. archivepath должен быть путём к файлу ZIP или к определённому пути внутри файла ZIP. Например, archivepath
foo/bar.zip/libбудет искать модули в директорииlibвнутри файла ZIPfoo/bar.zip(при условии, что она существует).Если archivepath не указывает на действительный архив ZIP, генерируется
ZipImportError.-
find_module(fullname[, path]) -
Ищет модуль, указанный параметром fullname. fullname должен быть полным (разделенным точками) именем модуля. Возвращает сам экземпляр zipimporter, если модуль найден, или
None, если нет. Необязательный аргумент path игнорируется — он присутствует для совместимости с протоколом импортера.
-
get_code(fullname) -
Возвращает объект кода для указанного модуля. Генерирует
ZipImportError, если модуль не найден.
-
get_data(pathname) -
Возвращает данные, связанные с pathname. Генерирует
IOError, если файл не найден.
-
get_filename(fullname) -
Возвращает значение, которое бы установило
__file__если бы указанный модуль был импортирован. ГенерируетZipImportError, если модуль не найден.
Новая в версии 2.7.
-
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. -
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/2.7/library/zipimport.html