zipimport.md
1> **Источник:** https://python-all.ru/3.9/library/zipimport.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# [`zipimport`](https://python-all.ru/3.9/library/zipimport.html#module-zipimport) – Импорт модулей из Zip-архивов89**Исходный код:** [Lib/zipimport.py](https://python-all.ru/src/3.9/Lib/zipimport.py)1011---1213Этот модуль добавляет возможность импортировать модули Python (`*.py`, `*.pyc`) и пакеты из архивов формата ZIP. Обычно нет необходимости использовать модуль [`zipimport`](https://python-all.ru/3.9/library/zipimport.html#module-zipimport) явно; он автоматически используется встроенным механизмом [`import`](https://python-all.ru/3.9/reference/simple_stmts.html#import) для элементов [`sys.path`](https://python-all.ru/3.9/library/sys.html#sys.path), являющихся путями к ZIP-архивам.1415Обычно [`sys.path`](https://python-all.ru/3.9/library/sys.html#sys.path) – это список имён каталогов в виде строк. Этот модуль также позволяет элементу [`sys.path`](https://python-all.ru/3.9/library/sys.html#sys.path) быть строкой, именующей ZIP-архив. ZIP-архив может содержать структуру подкаталогов для поддержки импорта пакетов, и можно указать путь внутри архива для импорта только из подкаталога. Например, путь `example.zip/lib/` будет импортировать только из подкаталога `lib/` внутри архива.1617В ZIP-архиве могут присутствовать любые файлы, но импортёры вызываются только для файлов `.py` и `.pyc`. Импорт динамических модулей из ZIP (`.pyd`, `.so`) запрещён. Обратите внимание, что если архив содержит только `.py` файлы, Python не будет пытаться изменить архив, добавляя соответствующий файл `.pyc`, то есть если ZIP-архив не содержит файлов `.pyc`, импорт может быть довольно медленным.1819Изменено в версии 3.8: Ранее ZIP-архивы с комментарием архива не поддерживались.2021> **См. также**22>23> **[Примечание по применению PKZIP](https://python-all.ru/3.9/library/zipimport.html)**24>25> Документация по формату ZIP-файлов от Фила Каца, создателя формата и используемых алгоритмов.26>27> **[**PEP 273**](https://python-all.ru/3.9/library/zipimport.html) – Импорт модулей из Zip-архивов**28>29> Автор Джеймс С. Альстрём, который также предоставил реализацию. Python 2.3 следует спецификации из [**PEP 273**](https://python-all.ru/3.9/library/zipimport.html), но использует реализацию, написанную Юстом ван Россумом, который использует хуки импорта, описанные в [**PEP 302**](https://python-all.ru/3.9/library/zipimport.html).30>31> **[**PEP 302**](https://python-all.ru/3.9/library/zipimport.html) – новые хуки импорта**32>33> PEP, добавляющий хуки импорта, которые помогают этому модулю работать.3435Этот модуль определяет исключение:3637#### `exception zipimport.ZipImportError`3839Исключение, вызываемое объектами zipimporter. Оно является подклассом [`ImportError`](https://python-all.ru/3.9/library/exceptions.html#ImportError), поэтому его можно перехватывать также как [`ImportError`](https://python-all.ru/3.9/library/exceptions.html#ImportError).4041## Объекты zipimporter4243[`zipimporter`](https://python-all.ru/3.9/library/zipimport.html#zipimport.zipimporter) – это класс для импорта ZIP-файлов.4445#### `class zipimport.zipimporter(archivepath)`4647Создаёт новый экземпляр zipimporter. *archivepath* должен быть путём к ZIP-файлу или к конкретному пути внутри ZIP-файла. Например, *archivepath* со значением `foo/bar.zip/lib` будет искать модули в каталоге `lib` внутри ZIP-файла `foo/bar.zip` (при условии, что он существует).4849[`ZipImportError`](https://python-all.ru/3.9/library/zipimport.html#zipimport.ZipImportError) возбуждается, если *archivepath* не указывает на валидный ZIP-архив.5051#### `find_module(fullname[, path])`5253Ищет модуль, заданный параметром *fullname*. *fullname* должно быть полностью квалифицированным (точечным) именем модуля. Возвращает сам экземпляр zipimporter, если модуль найден, или [`None`](https://python-all.ru/3.9/library/constants.html#None) в противном случае. Необязательный аргумент *path* игнорируется – он предусмотрен для совместимости с протоколом импортера.5455#### `get_code(fullname)`5657Возвращает объект кода для указанного модуля. Возбуждает [`ZipImportError`](https://python-all.ru/3.9/library/zipimport.html#zipimport.ZipImportError), если модуль не найден.5859#### `get_data(pathname)`6061Возвращает данные, связанные с *pathname*. Возбуждает [`OSError`](https://python-all.ru/3.9/library/exceptions.html#OSError), если файл не найден.6263Изменено в версии 3.3: [`IOError`](https://python-all.ru/3.9/library/exceptions.html#IOError) раньше вызывалось вместо [`OSError`](https://python-all.ru/3.9/library/exceptions.html#OSError).6465#### `get_filename(fullname)`6667Возвращает значение, которое `__file__` получило бы, если бы указанный модуль был импортирован. Возбуждает [`ZipImportError`](https://python-all.ru/3.9/library/zipimport.html#zipimport.ZipImportError), если модуль не найден.6869Новое в версии 3.1.7071#### `get_source(fullname)`7273Возвращает исходный код указанного модуля. Вызывает [`ZipImportError`](https://python-all.ru/3.9/library/zipimport.html#zipimport.ZipImportError), если модуль не найден, возвращает [`None`](https://python-all.ru/3.9/library/constants.html#None), если архив содержит модуль, но без исходного кода.7475#### `is_package(fullname)`7677Возвращает `True`, если модуль, указанный в *fullname*, является пакетом. Вызывает [`ZipImportError`](https://python-all.ru/3.9/library/zipimport.html#zipimport.ZipImportError), если модуль не найден.7879#### `load_module(fullname)`8081Загружает модуль, указанный в *fullname*. *fullname* должно быть полностью определённым (с точками) именем модуля. Возвращает импортированный модуль или возбуждает [`ZipImportError`](https://python-all.ru/3.9/library/zipimport.html#zipimport.ZipImportError), если он не найден.8283#### `archive`8485Имя файла ZIP-архива, связанного с импортёром, без возможного подпути.8687#### `prefix`8889Подпуть внутри ZIP-файла, где ищутся модули. Для объектов zipimporter, указывающих на корень ZIP-файла, это пустая строка.9091Атрибуты [`archive`](https://python-all.ru/3.9/library/zipimport.html#zipimport.zipimporter.archive) и [`prefix`](https://python-all.ru/3.9/library/zipimport.html#zipimport.zipimporter.prefix), если их объединить через косую черту, равны исходному аргументу *archivepath*, переданному конструктору [`zipimporter`](https://python-all.ru/3.9/library/zipimport.html#zipimport.zipimporter).9293## Примеры9495Вот пример импорта модуля из ZIP-архива – обратите внимание, что модуль [`zipimport`](https://python-all.ru/3.9/library/zipimport.html#module-zipimport) явно не используется.9697```console98$ unzip -l example.zip99Archive: example.zip100 Length Date Time Name101 -------- ---- ---- ----102 8467 11-26-02 22:30 jwzthreading.py103 -------- -------104 8467 1 file105$ ./python106Python 2.3 (#1, Aug 1 2003, 19:54:32)107>>> import sys108>>> sys.path.insert(0, 'example.zip') # Add .zip file to front of path109>>> import jwzthreading110>>> jwzthreading.__file__111'example.zip/jwzthreading.py'112```113