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 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, если файл не найден.
-
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.10/library/zipimport.html