Spec-Zone.ru › Python 3.10

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.

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 (при условии, что он существует).

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

create_module(spec)

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

Новая в версии 3.10.

exec_module(module)

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

Новая в версии 3.10.

find_loader(fullname, path=None)

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

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

find_module(fullname, path=None)

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

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

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

Spec-Zone.ru

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