zipimport — Импорт модулей из Zip-архивов¶
Исходный код: Lib/zipimport.py.
Этот модуль добавляет возможность импортировать модули Python (*.py, *.pyc) и пакеты из архивов формата ZIP. Обычно нет необходимости использовать модуль zipimport явно; он автоматически используется встроенным механизмом import для элементов sys.path, которые являются путями к ZIP-архивам.
Обычно sys.path представляет собой список имен каталогов в виде строк. Этот модуль также позволяет элементу sys.path быть строкой, называющей архив ZIP-файла. ZIP-архив может содержать структуру подкаталогов для поддержки импорта пакетов, а путь внутри архива может быть указан только для импорта из подкаталога. Например, путь example.zip/lib/ будет импортировать только из подкаталога lib/ внутри архива.
Этот модуль добавляет возможность импортировать модули Python (.py, .pyc) и пакеты из архивов формата ZIP. Обычно нет необходимости использовать модуль .pyd явно; он автоматически используется встроенным механизмом .so для элементов .py, которые являются путями к ZIP-архивам.
Изменено в версии 3.8: Ранее архивы ZIP с архивным комментарием не поддерживались.
См.также
- PKZIP Application Note
Документация по формату файлов ZIP от Фила Каца, создателя формата и используемых алгоритмов.
- PEP 273 - Импорт модулей из Zip-архивов
Написана Джеймсом К. Алстромом, который также предоставил реализацию. Python 2.3 следует спецификации в PEP 273, но использует реализацию, написанную Джастом ван Россумом, которая использует крючки импорта, описанные в PEP 302.
importlib- Реализация механизма импортаПакет, содержащий соответствующие протоколы для всех импортеров.
Этот модуль определяет исключение:
-
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_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'