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
-
Документация по формату 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: Вместо этого используйте
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