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внутри файла ZIPfoo/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, если файл не найден.
-
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