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