> **Источник:** https://python-all.ru/3.0/library/zipimport.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# `zipimport` – Импорт модулей из Zip-архивов

Этот модуль добавляет возможность импорта модулей Python (`*.py`, `*.py[co]`) и пакетов из архивов в формате ZIP. Обычно нет необходимости использовать модуль `zipimport` явно; он автоматически используется встроенным механизмом [`import`](https://python-all.ru/3.0/reference/simple_stmts.html#import) для элементов `sys.path`, которые являются путями к ZIP-архивам.

Обычно `sys.path` – это список имён каталогов в виде строк. Этот модуль также позволяет элементу `sys.path` быть строкой, указывающей на ZIP-архив. ZIP-архив может содержать структуру подкаталогов для поддержки импорта пакетов, и можно указать путь внутри архива, чтобы импортировать только из подкаталога. Например, путь `/tmp/example.zip/lib/` будет импортировать только из подкаталога `lib/` внутри архива.

В ZIP-архиве могут присутствовать любые файлы, но для импорта доступны только файлы `.py` и `.py[co]`. Импорт динамических модулей из ZIP (`.pyd`, `.so`) запрещён. Обратите внимание, что если архив содержит только файлы `.py`, Python не будет пытаться изменить архив, добавляя соответствующий файл `.pyc` или `.pyo`, а это значит, что если ZIP-архив не содержит файлов `.pyc`, импорт может быть довольно медленным.

> **См. также**
>
> **[Примечание по применению PKZIP](https://python-all.ru/3.0/library/zipimport.html)**
>
> Документация по формату ZIP-файлов от Фила Каца, создателя формата и используемых алгоритмов.
>
> **[**PEP 0273**](https://python-all.ru/3.0/library/zipimport.html) – Импорт модулей из Zip-архивов**
>
> Написан Джеймсом С. Альстромом, который также предоставил реализацию. Python 2.3 соответствует спецификации PEP 273, но использует реализацию, написанную Юстом ван Россумом, которая использует хуки импорта, описанные в PEP 302.
>
> **[**PEP 0302**](https://python-all.ru/3.0/library/zipimport.html) – Новые перехватчики импорта**
>
> PEP, добавляющий хуки импорта, которые помогают этому модулю работать.

Этот модуль определяет исключение:

#### `[zipimport.ZipImportError]exception zipimport.ZipImportError`

Исключение, вызываемое объектами zipimporter. Это подкласс

[`ImportError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ImportError)

, поэтому его также можно перехватывать как

[`ImportError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ImportError)

.

## Объекты zipimporter

[`zipimporter`](https://python-all.ru/3.0/library/zipimport.html#zipimport.zipimporter) – это класс для импорта ZIP-файлов.

#### `[zipimport.zipimporter]class zipimport.zipimporter(archivepath)`

Создаёт новый экземпляр zipimporter. *archivepath* должен быть путём к ZIP- файлу или к определённому пути внутри ZIP-файла. Например, *archivepath* равный `foo/bar.zip/lib` будет искать модули в каталоге `lib` внутри ZIP-файла `foo/bar.zip` (при условии, что он существует).

[`ZipImportError`](https://python-all.ru/3.0/library/zipimport.html#zipimport.ZipImportError) вызывается, если *archivepath* не указывает на валидный ZIP- архив.

#### `[zipimport.zipimporter.find_module]find_module(fullname[, path])`

Ищет модуль, заданный

*fullname*

.

*fullname*

должно быть полностью квалифицированным (с точками) именем модуля. Возвращает сам экземпляр zipimporter, если модуль найден, или

[`None`](https://python-all.ru/3.0/library/constants.html#None)

, если нет. Необязательный аргумент

*path*

игнорируется – он присутствует для совместимости с протоколом импортера.

#### `[zipimport.zipimporter.get_code]get_code(fullname)`

Возвращает объект кода для указанного модуля. Вызывает

[`ZipImportError`](https://python-all.ru/3.0/library/zipimport.html#zipimport.ZipImportError)

, если модуль не найден.

#### `[zipimport.zipimporter.get_data]get_data(pathname)`

Возвращает данные, связанные с

*pathname*

. Возбуждает

[`IOError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.IOError)

, если файл не найден.

#### `[zipimport.zipimporter.get_source]get_source(fullname)`

Возвращает исходный код для указанного модуля. Вызывает

[`ZipImportError`](https://python-all.ru/3.0/library/zipimport.html#zipimport.ZipImportError)

, если модуль не найден, возвращает

[`None`](https://python-all.ru/3.0/library/constants.html#None)

, если архив содержит модуль, но не имеет для него исходного кода.

#### `[zipimport.zipimporter.is_package]is_package(fullname)`

Возвращает True, если модуль, указанный

*fullname*

, является пакетом. Возбуждает

[`ZipImportError`](https://python-all.ru/3.0/library/zipimport.html#zipimport.ZipImportError)

, если модуль не найден.

#### `[zipimport.zipimporter.load_module]load_module(fullname)`

Загружает модуль, указанный

*fullname*

.

*fullname*

должно быть полностью квалифицированным (с точками) именем модуля. Возвращает импортированный модуль или вызывает

[`ZipImportError`](https://python-all.ru/3.0/library/zipimport.html#zipimport.ZipImportError)

, если он не найден.

#### `[zipimport.zipimporter.archive]archive`

Имя файла ZIP-архива, связанного с импортёром, без возможного подпути.

#### `[zipimport.zipimporter.prefix]prefix`

Подпуть внутри ZIP-файла, где ищутся модули. Для объектов zipimporter, указывающих на корень ZIP-файла, это пустая строка.

Атрибуты [`archive`](https://python-all.ru/3.0/library/zipimport.html#zipimport.zipimporter.archive) и [`prefix`](https://python-all.ru/3.0/library/zipimport.html#zipimport.zipimporter.prefix), объединённые через слеш, равны исходному аргументу *archivepath*, переданному конструктору [`zipimporter`](https://python-all.ru/3.0/library/zipimport.html#zipimport.zipimporter).

## Примеры

Вот пример импорта модуля из ZIP-архива – обратите внимание, что модуль `zipimport` не используется явно.

```python
$ unzip -l /tmp/example.zip
Archive:  /tmp/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, '/tmp/example.zip')  # Add .zip file to front of path
>>> import jwzthreading
>>> jwzthreading.__file__
'/tmp/example.zip/jwzthreading.py'
```
