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. Импорт динамических модулей из ZIP-архивов (.pyd, .so) запрещён. Обратите внимание: если архив содержит только файлы .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 (если такой каталог существует).

Если 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.12/library/zipimport.html

Spec-Zone.ru

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