Содержание страницы
29.2. zipimport – Импорт модулей из Zip-архивов¶zipimport – Import modules from Zip archives
Этот модуль позволяет импортировать модули Python (*.py, *.py[co]) и пакеты из ZIP-архивов. Обычно не требуется явно использовать модуль zipimport; он автоматически используется встроенным механизмом import для элементов sys.path, которые являются путями к ZIP-архивам.
Обычно sys.path – это список имён каталогов в виде строк. Этот модуль также позволяет элементу sys.path быть строкой, указывающей на ZIP-архив. ZIP-архив может содержать структуру подкаталогов для поддержки импорта пакетов, и можно указать путь внутри архива, чтобы импортировать только из подкаталога. Например, путь /tmp/example.zip/lib/ будет импортировать только из подкаталога lib/ внутри архива.
В ZIP-архиве могут присутствовать любые файлы, но для импорта доступны только файлы .py и .py[co]. Импорт динамических модулей из ZIP (.pyd, .so) запрещён. Обратите внимание, что если архив содержит только файлы .py, Python не будет пытаться изменить архив, добавляя соответствующий файл .pyc или .pyo, а это значит, что если ZIP-архив не содержит файлов .pyc, импорт может быть довольно медленным.
См. также
- Примечание по применению PKZIP
- Документация по формату ZIP-файлов от Фила Каца, создателя формата и используемых алгоритмов.
- PEP 0273 – Импорт модулей из Zip-архивов
- Написан Джеймсом С. Альстромом, который также предоставил реализацию. Python 2.3 соответствует спецификации PEP 273, но использует реализацию, написанную Юстом ван Россумом, которая использует хуки импорта, описанные в PEP 302.
- PEP 0302 – Новые перехватчики импорта
- PEP, добавляющий хуки импорта, которые помогают этому модулю работать.
Этот модуль определяет исключение:
- exception zipimport.ZipImportError¶
- Исключение, вызываемое объектами zipimporter. Это подкласс ImportError, поэтому его также можно перехватывать как ImportError.
29.2.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, если модуль не найден.
Новое в версии 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.
29.2.2. Примеры¶Examples
Вот пример импорта модуля из ZIP-архива – обратите внимание, что модуль zipimport не используется явно.
$ unzip -l /tmp/example.zip
Archive: /tmp/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, '/tmp/example.zip') # Add .zip file to front of path
>>> import jwzthreading
>>> jwzthreading.__file__
'/tmp/example.zip/jwzthreading.py'