Содержание страницы
31.4. zipimport – Импорт модулей из Zip-архивов¶zipimport – Import modules from Zip archives
Новое в версии 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) запрещён. Обратите внимание, что если архив содержит только
.py файлы, Python не будет пытаться изменить архив, добавляя
соответствующий файл .pyc или .pyo. Это означает, что если ZIP-архив
не содержит файлов .pyc, импорт может быть довольно медленным.
Вызов встроенной функции reload() для модуля, загруженного из ZIP-архива,
завершится ошибкой; вряд ли потребуется reload(),
поскольку это означало бы, что ZIP-архив был изменён во время выполнения.
ZIP-архивы с комментарием архива в настоящее время не поддерживаются.
См. также
- Примечание по применению PKZIP
Документация по формату ZIP-файлов от Фила Каца, создателя формата и используемых алгоритмов.
- PEP 273 – Импорт модулей из Zip-архивов
Написан Джеймсом С. Альстромом, который также предоставил реализацию. Python 2.3 соответствует спецификации PEP 273, но использует реализацию, написанную Юстом ван Россумом, которая использует хуки импорта, описанные в PEP 302.
- PEP 302 – новые хуки импорта
PEP, добавляющий хуки импорта, которые помогают этому модулю работать.
Этот модуль определяет исключение:
-
exception
zipimport.ZipImportError¶ Исключение, вызываемое объектами zipimporter. Оно является подклассом
ImportError, поэтому его можно перехватывать также какImportError.
31.4.1. Объекты zipimporter¶zipimporter Objects
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. Возбуждает
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.-
31.4.2. Примеры¶Examples
Вот пример импорта модуля из 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'