zipimport
— Импорт модулей из Zip-архивов
Данный модуль добавляет возможность импортировать Python модули (*.py
,
*.pyc
) и пакеты из архивов формата ZIP. Обычно нет необходимости явно
использовать модуль zipimport
; он автоматически используется встроенным
механизмом import
для элементов sys.path
, являющихся путями
к ZIP-архивам.
Обычно sys.path
представляет собой список имён каталогов в виде строк.
Данный модуль также позволяет элементу sys.path
быть строкой, именующей
ZIP-архив. ZIP-архив может содержать структуру подкаталогов для поддержки
импорта пакетов, а путь внутри архива можно указать для импорта только из
подкаталога. Например, путь example.zip/lib/
будет импортироваться
только из подкаталога lib/
внутри архива.
В ZIP-архиве могут быть любые файлы, но для импорта доступны только файлы
.py
и .pyc
. ZIP-импорт динамических модулей (.pyd
,
.so
) запрещен. Обратите внимание, что если архив содержит только
.py
файлы, Python не будет пытаться изменить архив, добавив соответствующий
.pyc
файл, а это означает, что если ZIP-архив не содержит файлов
.pyc
, импорт может быть довольно медленным.
Изменено в версии 3.8: Ранее не поддерживались ZIP-архивы с комментарием к архиву.
См.также
- Примечание по применению PKZIP
- Документация по формату файла ZIP от Фила Каца, создателя формата и используемых алгоритмов.
- PEP 273 — Импорт модулей из Zip-архивов
- Написано Джеймсом С. Алстромом, который также предоставил реализацию. Питон 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
внутри ZIP-файлаfoo/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') # Добавить файл .zip в начало пути
>>> import jwzthreading
>>> jwzthreading.__file__
'example.zip/jwzthreading.py'