Содержание страницы
zipimport – Импорт модулей из Zip-архивов¶zipimport – Import modules from Zip archives
Этот модуль добавляет возможность импортировать модули 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, импорт может быть довольно медленным.
ZIP-архивы с комментарием архива в настоящее время не поддерживаются.
См. также
- Примечание по применению PKZIP
Документация по формату ZIP-файлов от Фила Каца, создателя формата и используемых алгоритмов.
- PEP 273 – Импорт модулей из Zip-архивов
Написан Джеймсом С. Альстромом, который также предоставил реализацию. Python 2.3 соответствует спецификации PEP 273, но использует реализацию, написанную Юстом ван Россумом, которая использует хуки импорта, описанные в PEP 302.
- PEP 302 – новые хуки импорта
PEP, добавляющий хуки импорта, которые помогают этому модулю работать.
Этот модуль определяет исключение:
-
exception
zipimport.ZipImportError¶ Исключение, вызываемое объектами zipimporter. Оно является подклассом
ImportError, поэтому его можно перехватывать также какImportError.
Объекты 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. Возбуждает
OSError, если файл не найден.
-
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.-
Примеры¶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') # Add .zip file to front of path
>>> import jwzthreading
>>> jwzthreading.__file__
'example.zip/jwzthreading.py'