Содержание страницы
zipimport – Импорт модулей из Zip-архивов¶zipimport – Import modules from Zip archives
Исходный код: 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– Реализация механизма импортаПакет, предоставляющий соответствующие протоколы для реализации всеми импортёрами.
Этот модуль определяет исключение:
- exception zipimport.ZipImportError¶
Исключение, вызываемое объектами zipimporter. Оно является подклассом
ImportError, поэтому его можно перехватывать также какImportError.
Объекты zipimporter¶zipimporter Objects
zipimporter – это класс для импорта ZIP-файлов.
- class zipimport.zipimporter(archivepath)¶
Создаёт новый экземпляр zipimporter. archivepath должен быть путём к ZIP-файлу или к конкретному пути внутри ZIP-файла. Например, archivepath со значением
foo/bar.zip/libбудет искать модули в каталогеlibвнутри ZIP-файлаfoo/bar.zip(при условии, что он существует).ZipImportErrorвозбуждается, если archivepath не указывает на валидный ZIP-архив.Изменено в версии 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.
Примеры¶Examples
Вот пример импорта модуля из 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'