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'
