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

zipimport.md

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

1> **Источник:** https://python-all.ru/3.4/library/zipimport.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 31.1. [`zipimport`](https://python-all.ru/3.4/library/zipimport.html#module-zipimport) – Импорт модулей из Zip-архивов89Этот модуль добавляет возможность импортировать модули Python (`*.py`, `*.py[co]`) и пакеты из архивов ZIP. Обычно нет необходимости явно использовать модуль [`zipimport`](https://python-all.ru/3.4/library/zipimport.html#module-zipimport); он автоматически используется встроенным механизмом [`import`](https://python-all.ru/3.4/reference/simple_stmts.html#import) для элементов [`sys.path`](https://python-all.ru/3.4/library/sys.html#sys.path), которые являются путями к ZIP-архивам.1011Обычно [`sys.path`](https://python-all.ru/3.4/library/sys.html#sys.path) – это список имён каталогов в виде строк. Этот модуль также позволяет элементу [`sys.path`](https://python-all.ru/3.4/library/sys.html#sys.path) быть строкой, указывающей на ZIP-архив. ZIP-архив может содержать структуру подкаталогов для поддержки импорта пакетов, и можно указать путь внутри архива, чтобы импортировать только из подкаталога. Например, путь `example.zip/lib/` будет импортировать только из подкаталога `lib/` внутри архива.1213В ZIP-архиве могут присутствовать любые файлы, но для импорта доступны только файлы `.py` и `.py[co]`. Импорт динамических модулей из ZIP (`.pyd`, `.so`) запрещён. Обратите внимание, что если архив содержит только файлы `.py`, Python не будет пытаться изменить архив, добавляя соответствующий файл `.pyc` или `.pyo`, а это значит, что если ZIP-архив не содержит файлов `.pyc`, импорт может быть довольно медленным.1415ZIP-архивы с комментарием архива в настоящее время не поддерживаются.1617> **См. также**18>19> **[Примечание по применению PKZIP](https://python-all.ru/3.4/library/zipimport.html)**20>21> Документация по формату ZIP-файлов от Фила Каца, создателя формата и используемых алгоритмов.22>23> **[**PEP 273**](https://python-all.ru/3.4/library/zipimport.html) – Импорт модулей из Zip-архивов**24>25> Написан Джеймсом С. Альстромом, который также предоставил реализацию. Python 2.3 соответствует спецификации PEP 273, но использует реализацию, написанную Юстом ван Россумом, которая использует хуки импорта, описанные в PEP 302.26>27> **[**PEP 302**](https://python-all.ru/3.4/library/zipimport.html) – новые хуки импорта**28>29> PEP, добавляющий хуки импорта, которые помогают этому модулю работать.3031Этот модуль определяет исключение:3233#### `exception zipimport.ZipImportError`3435Исключение, вызываемое объектами zipimporter. Это подкласс [`ImportError`](https://python-all.ru/3.4/library/exceptions.html#ImportError), поэтому его также можно перехватывать как [`ImportError`](https://python-all.ru/3.4/library/exceptions.html#ImportError).3637## 31.1.1. Объекты zipimporter3839[`zipimporter`](https://python-all.ru/3.4/library/zipimport.html#zipimport.zipimporter) – это класс для импорта ZIP-файлов.4041#### `class zipimport.zipimporter(archivepath)`4243Создаёт новый экземпляр zipimporter. *archivepath* должен быть путём к ZIP- файлу или к определённому пути внутри ZIP-файла. Например, *archivepath* равный `foo/bar.zip/lib` будет искать модули в каталоге `lib` внутри ZIP-файла `foo/bar.zip` (при условии, что он существует).4445[`ZipImportError`](https://python-all.ru/3.4/library/zipimport.html#zipimport.ZipImportError) вызывается, если *archivepath* не указывает на валидный ZIP- архив.4647#### `find_module(fullname[, path])`4849Ищет модуль, заданный *fullname*. *fullname* должно быть полностью квалифицированным (с точками) именем модуля. Возвращает сам экземпляр zipimporter, если модуль найден, или [`None`](https://python-all.ru/3.4/library/constants.html#None), если нет. Необязательный аргумент *path* игнорируется – он присутствует для совместимости с протоколом импортера.5051#### `get_code(fullname)`5253Возвращает объект кода для указанного модуля. Вызывает [`ZipImportError`](https://python-all.ru/3.4/library/zipimport.html#zipimport.ZipImportError), если модуль не найден.5455#### `get_data(pathname)`5657Возвращает данные, связанные с *pathname*. Вызывает [`OSError`](https://python-all.ru/3.4/library/exceptions.html#OSError), если файл не найден.5859Изменено в версии 3.3: [`IOError`](https://python-all.ru/3.4/library/exceptions.html#IOError) ранее вызывалось вместо [`OSError`](https://python-all.ru/3.4/library/exceptions.html#OSError).6061#### `get_filename(fullname)`6263Возвращает значение, которое было бы присвоено `__file__`, если бы указанный модуль был импортирован. Вызывает [`ZipImportError`](https://python-all.ru/3.4/library/zipimport.html#zipimport.ZipImportError), если модуль не найден.6465Новое в версии 3.1.6667#### `get_source(fullname)`6869Возвращает исходный код для указанного модуля. Вызывает [`ZipImportError`](https://python-all.ru/3.4/library/zipimport.html#zipimport.ZipImportError), если модуль не найден, возвращает [`None`](https://python-all.ru/3.4/library/constants.html#None), если архив содержит модуль, но не имеет для него исходного кода.7071#### `is_package(fullname)`7273Возвращает `True`, если модуль, указанный *fullname*, является пакетом. Вызывает [`ZipImportError`](https://python-all.ru/3.4/library/zipimport.html#zipimport.ZipImportError), если модуль не найден.7475#### `load_module(fullname)`7677Загружает модуль, указанный *fullname*. *fullname* должно быть полностью квалифицированным (с точками) именем модуля. Возвращает импортированный модуль или вызывает [`ZipImportError`](https://python-all.ru/3.4/library/zipimport.html#zipimport.ZipImportError), если он не найден.7879#### `archive`8081Имя файла ZIP-архива, связанного с импортёром, без возможного подпути.8283#### `prefix`8485Подпуть внутри ZIP-файла, где ищутся модули. Для объектов zipimporter, указывающих на корень ZIP-файла, это пустая строка.8687Атрибуты [`archive`](https://python-all.ru/3.4/library/zipimport.html#zipimport.zipimporter.archive) и [`prefix`](https://python-all.ru/3.4/library/zipimport.html#zipimport.zipimporter.prefix), объединённые через слеш, равны исходному аргументу *archivepath*, переданному конструктору [`zipimporter`](https://python-all.ru/3.4/library/zipimport.html#zipimport.zipimporter).8889## 31.1.2. Примеры9091Вот пример импорта модуля из ZIP-архива – обратите внимание, что модуль [`zipimport`](https://python-all.ru/3.4/library/zipimport.html#module-zipimport) не используется явно.9293```python94$ unzip -l example.zip95Archive:  example.zip96  Length     Date   Time    Name97 --------    ----   ----    ----98     8467  11-26-02 22:30   jwzthreading.py99 --------                   -------100     8467                   1 file101$ ./python102Python 2.3 (#1, Aug 1 2003, 19:54:32)103>>> import sys104>>> sys.path.insert(0, 'example.zip')  # Add .zip file to front of path105>>> import jwzthreading106>>> jwzthreading.__file__107'example.zip/jwzthreading.py'108```109