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'