Модуль zipimport
добавляет возможность импорта модулей Python (*.py
, *.pyc
) и пакетов из архивов формата ZIP. Обычно явно не требуется использовать модуль zipimport
, он автоматически используется встроенным механизмом импорта для элементов sys.path
, которые являются путями к архивам ZIP.
Обычно sys.path
представляет собой список имен каталогов в виде строк. Этот модуль также добавляет возможность sys.path
использовать строки, обозначающие ZIP-архив. ZIP-архив может содержать структуру подкаталогов для поддержки импорта пакетов, а путь в архиве может быть указан только для импорта из подкаталога. Например, путь example.zip/lib/
будет импортироваться только из подкаталога lib/
в архиве.
В ZIP-архиве могут присутствовать любые файлы, но для импорта доступны только файлы .py
и .pyc
. ZIP-импорт динамических модулей (.pyd
, .so
) запрещен.
Обратите внимание, что если архив содержит только .py
файлы, то Python не будет пытаться изменить архив, добавив соответствующий файл .pyc
, а это означает, что, если архив ZIP не содержит файлов .pyc
, то импорт может быть довольно медленным.
Изменено в Python 3.8: Ранее ZIP-архивы с комментариями не поддерживались.
zipimport
:Вот пример импорта модуля из ZIP-архива. Обратите внимание, что модуль zipimport
не используется явно.
# смотрим что в архиве `example.zip` $ unzip -l example.zip # Archive: example.zip # Length Date Time Name # -------- ---- ---- ---- # 8467 11-26-02 22:30 jwzthreading.py # -------- ------- # 8467 1 file
Запускаем Python.
>>> import sys # Добавляем zip-файл в начало пути `sys.path` >>> sys.path.insert(0, 'example.zip') # импортируем файл из архива >>> import jwzthreading >>> jwzthreading.__file__ # 'example.zip/jwzthreading.py'