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.13: Добавлена поддержка ZIP64
Изменено в версии 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.
-
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, будет удалено в версии 3.15: Вместо этого используйте
exec_module().
-
invalidate_caches() -
Очищает внутренний кэш сведений о файлах, найденных в ZIP-архиве.
Добавлено в версии 3.10.
-
archive -
Имя файла связанного ZIP-файла импортёра без возможного подчинённого пути.
-
prefix -
Подчинённый путь внутри ZIP-файла, по которому выполняется поиск модулей. Для объектов zipimporter, указывающих на корень ZIP-файла, это пустая строка.
Если объединить атрибуты
archiveиprefix, вставив между ними косую черту, получится исходный аргумент archivepath, переданный конструкторуzipimporter. -
Примеры
Ниже приведён пример импорта модуля из ZIP-архива — обратите внимание, что модуль zipimport явно не используется.
$ unzip -l example_archive.zip
Archive: example_archive.zip
Length Date Time Name
-------- ---- ---- ----
8467 01-01-00 12:30 example.py
-------- -------
8467 1 file
>>> import sys >>> # Add the archive to the front of the module search path >>> sys.path.insert(0, 'example_archive.zip') >>> import example >>> example.__file__ 'example_archive.zip/example.py'
© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/library/zipimport.html