Документация Python неофициальный перевод

zipimport.md

169 строк · 9.0 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.1/library/zipimport.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 29.2. `zipimport` – Импорт модулей из Zip-архивов89Этот модуль позволяет импортировать модули Python (`*.py`, `*.py[co]`) и пакеты из ZIP-архивов. Обычно не требуется явно использовать модуль `zipimport`; он автоматически используется встроенным механизмом [`import`](https://python-all.ru/3.1/reference/simple_stmts.html#import) для элементов `sys.path`, которые являются путями к ZIP-архивам.1011Обычно `sys.path` – это список имён каталогов в виде строк. Этот модуль также позволяет элементу `sys.path` быть строкой, указывающей на ZIP-архив. ZIP-архив может содержать структуру подкаталогов для поддержки импорта пакетов, и можно указать путь внутри архива, чтобы импортировать только из подкаталога. Например, путь `/tmp/example.zip/lib/` будет импортировать только из подкаталога `lib/` внутри архива.1213В ZIP-архиве могут присутствовать любые файлы, но для импорта доступны только файлы `.py` и `.py[co]`. Импорт динамических модулей из ZIP (`.pyd`, `.so`) запрещён. Обратите внимание, что если архив содержит только файлы `.py`, Python не будет пытаться изменить архив, добавляя соответствующий файл `.pyc` или `.pyo`, а это значит, что если ZIP-архив не содержит файлов `.pyc`, импорт может быть довольно медленным.1415> **См. также**16>17> **[Примечание по применению PKZIP](https://python-all.ru/3.1/library/zipimport.html)**18>19> Документация по формату ZIP-файлов от Фила Каца, создателя формата и используемых алгоритмов.20>21> **[**PEP 0273**](https://python-all.ru/3.1/library/zipimport.html) – Импорт модулей из Zip-архивов**22>23> Написан Джеймсом С. Альстромом, который также предоставил реализацию. Python 2.3 соответствует спецификации PEP 273, но использует реализацию, написанную Юстом ван Россумом, которая использует хуки импорта, описанные в PEP 302.24>25> **[**PEP 0302**](https://python-all.ru/3.1/library/zipimport.html) – Новые перехватчики импорта**26>27> PEP, добавляющий хуки импорта, которые помогают этому модулю работать.2829Этот модуль определяет исключение:3031#### `exception zipimport.ZipImportError`3233Исключение, вызываемое объектами zipimporter. Это подкласс3435[`ImportError`](https://python-all.ru/3.1/library/exceptions.html#ImportError)3637, поэтому его также можно перехватывать как3839[`ImportError`](https://python-all.ru/3.1/library/exceptions.html#ImportError)4041.4243## 29.2.1. Объекты zipimporter4445[`zipimporter`](https://python-all.ru/3.1/library/zipimport.html#zipimport.zipimporter) – это класс для импорта ZIP-файлов.4647#### `class zipimport.zipimporter(archivepath)`4849Создаёт новый экземпляр zipimporter. *archivepath* должен быть путём к ZIP- файлу или к определённому пути внутри ZIP-файла. Например, *archivepath* равный `foo/bar.zip/lib` будет искать модули в каталоге `lib` внутри ZIP-файла `foo/bar.zip` (при условии, что он существует).5051[`ZipImportError`](https://python-all.ru/3.1/library/zipimport.html#zipimport.ZipImportError) вызывается, если *archivepath* не указывает на валидный ZIP- архив.5253#### `find_module(fullname[, path])`5455Ищет модуль, заданный5657*fullname*5859.6061*fullname*6263должно быть полностью квалифицированным (с точками) именем модуля. Возвращает сам экземпляр zipimporter, если модуль найден, или6465[`None`](https://python-all.ru/3.1/library/constants.html#None)6667, если нет. Необязательный аргумент6869*path*7071игнорируется – он присутствует для совместимости с протоколом импортера.7273#### `get_code(fullname)`7475Возвращает объект кода для указанного модуля. Вызывает7677[`ZipImportError`](https://python-all.ru/3.1/library/zipimport.html#zipimport.ZipImportError)7879, если модуль не найден.8081#### `get_data(pathname)`8283Возвращает данные, связанные с8485*pathname*8687. Возбуждает8889[`IOError`](https://python-all.ru/3.1/library/exceptions.html#IOError)9091, если файл не найден.9293#### `get_filename(fullname)`9495Возвращает значение, которое было бы присвоено `__file__`, если бы указанный модуль был импортирован. Вызывает [`ZipImportError`](https://python-all.ru/3.1/library/zipimport.html#zipimport.ZipImportError), если модуль не найден.9697Новое в версии 3.1.9899#### `get_source(fullname)`100101Возвращает исходный код для указанного модуля. Вызывает102103[`ZipImportError`](https://python-all.ru/3.1/library/zipimport.html#zipimport.ZipImportError)104105, если модуль не найден, возвращает106107[`None`](https://python-all.ru/3.1/library/constants.html#None)108109, если архив содержит модуль, но не имеет для него исходного кода.110111#### `is_package(fullname)`112113Возвращает True, если модуль, указанный114115*fullname*116117, является пакетом. Возбуждает118119[`ZipImportError`](https://python-all.ru/3.1/library/zipimport.html#zipimport.ZipImportError)120121, если модуль не найден.122123#### `load_module(fullname)`124125Загружает модуль, указанный126127*fullname*128129.130131*fullname*132133должно быть полностью квалифицированным (с точками) именем модуля. Возвращает импортированный модуль или вызывает134135[`ZipImportError`](https://python-all.ru/3.1/library/zipimport.html#zipimport.ZipImportError)136137, если он не найден.138139#### `archive`140141Имя файла ZIP-архива, связанного с импортёром, без возможного подпути.142143#### `prefix`144145Подпуть внутри ZIP-файла, где ищутся модули. Для объектов zipimporter, указывающих на корень ZIP-файла, это пустая строка.146147Атрибуты [`archive`](https://python-all.ru/3.1/library/zipimport.html#zipimport.zipimporter.archive) и [`prefix`](https://python-all.ru/3.1/library/zipimport.html#zipimport.zipimporter.prefix), объединённые через слеш, равны исходному аргументу *archivepath*, переданному конструктору [`zipimporter`](https://python-all.ru/3.1/library/zipimport.html#zipimport.zipimporter).148149## 29.2.2. Примеры150151Вот пример импорта модуля из ZIP-архива – обратите внимание, что модуль `zipimport` не используется явно.152153```python154$ unzip -l /tmp/example.zip155Archive:  /tmp/example.zip156  Length     Date   Time    Name157 --------    ----   ----    ----158     8467  11-26-02 22:30   jwzthreading.py159 --------                   -------160     8467                   1 file161$ ./python162Python 2.3 (#1, Aug 1 2003, 19:54:32)163>>> import sys164>>> sys.path.insert(0, '/tmp/example.zip')  # Add .zip file to front of path165>>> import jwzthreading166>>> jwzthreading.__file__167'/tmp/example.zip/jwzthreading.py'168```169