Spec-Zone.ru › Python 3.5

zipimport — Импорт модулей из архивов ZIP

Этот модуль добавляет возможность импорта 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 Application Note
Документация по формату файла ZIP от Фила Кэтца, создателя формата и алгоритмов, используемых в нём.
PEP 273 - Импорт модулей из архивов ZIP
Написана Джеймсом К. Ахльстромом, который также предоставил реализацию. Python 2.3 следует спецификации PEP 273, но использует реализацию, написанную Джастом ван Россумом, которая использует механизмы импорта, описанные в PEP 302.
PEP 302 - Новые механизмы импорта
PEP для добавления механизмов импорта, которые помогают работе этого модуля.

Этот модуль определяет исключение:

exception zipimport.ZipImportError

Исключение, генерируемое объектами zipimporter. Это подкласс ImportError, поэтому его также можно перехватить как ImportError.

1. Объекты zipimporter

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, если файл не был найден.

Изменено в версии 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.

2. Примеры

Вот пример импорта модуля из архива 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–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.5/library/zipimport.html

Spec-Zone.ru

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