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.8: Ранее архивы ZIP с архивным комментарием не поддерживались.
См.также
- Замечания по применению PKZIP
- Документация по формату ZIP-файлов фила каца, создателя формата и алгоритмов используемый.
- PEP 273 - Импорт модулей из Zip-архивов
- Написанных Джеймсом К. Альстремом (James C. Ahlstrom), который также предоставил реализацию. Python 2.3 следует спецификации в PEP 273, но использует реализацию, написанную Just van Rossum, которая использует хуки импорта, описанные в 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_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'