Spec-Zone.ru › Python 3.11

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 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.11/library/zipimport.html

Spec-Zone.ru

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