Spec-Zone.ru › Python 3.13

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.13: Поддерживается ZIP64

Изменено в версии 3.8: Ранее архивы ZIP с комментарием не поддерживались.

См. также

PKZIP Application Note

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

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

Написан Джеймсом К. Алъстромом, который также предоставил реализацию. Python 2.3 следует спецификации PEP 273, но использует реализацию, написанную Джастом ван Россумом, которая использует механизмы импорта, описанные в PEP 302.

importlib - The implementation of the import machinery

Пакет, предоставляющий соответствующие протоколы для реализации всеми импортерами.

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

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.

Изменено в версии 3.12: Методы find_loader() и find_module(), устаревшие в 3.10, теперь удалены. Используйте find_spec() вместо них.

create_module(spec)

Реализация importlib.abc.Loader.create_module(), которая возвращает None, чтобы явно запросить стандартное поведение.

Добавлен в версии 3.10.

exec_module(module)

Реализация importlib.abc.Loader.exec_module().

Добавлен в версии 3.10.

find_spec(fullname, target=None)

Реализация importlib.abc.PathEntryFinder.find_spec().

Добавлен в версии 3.10.

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 при ошибке.

Устарело начиная с версии 3.10: Используйте exec_module() вместо него.

invalidate_caches()

Очищает внутренний кэш информации о файлах, найденных внутри архива ZIP.

Добавлен в версии 3.10.

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–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/zipimport.html

Spec-Zone.ru

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