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внутри файла ZIPfoo/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.11/library/zipimport.html