Spec-Zone.ru › Python 3.12

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 Приложение

Документация по формату файла 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.

Изменено в версии 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.12/library/zipimport.html

Spec-Zone.ru

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