Spec-Zone.ru › Python 3.8

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 Application Note

Документация по формату ZIP от Фила Кэтца, создателя формата и используемых алгоритмов.

PEP 273 - Импорт модулей из архивов ZIP

Написан Джеймсом К. Альстромом, который также предоставил реализацию. Python 2.3 следует спецификации PEP 273, но использует реализацию, написанную Джастом ван Россумом, которая использует механизмы импорта, описанные в 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 (при условии, что он существует).

Если archivepath не указывает на допустимый архив ZIP, генерируется ZipImportError.

find_module(fullname[, path])

Ищет модуль, указанный параметром fullname. fullname должен быть полным (с точками) именем модуля. Возвращает экземпляр zipimporter, если модуль найден, или None, если нет. Дополнительный аргумент path игнорируется — он присутствует для совместимости с протоколом импорта.

get_code(fullname)

Возвращает объект кода для указанного модуля. Генерирует ZipImportError, если модуль не найден.

get_data(pathname)

Возвращает данные, связанные с pathname. Генерирует OSError, если файл не найден.

Изменено в версии 3.3: IOError ранее генерировалось вместо 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.

Примеры

Вот пример, который импортирует модуль из архива 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'

© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/library/zipimport.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API