This document is for an old version of Python that is no longer supported. You should upgrade, and read the Python documentation for the current stable release.

# `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.

PEP 302 - New Import Hooks

  The PEP to add the import hooks that help this module work.

Цей модуль визначає виняток:

exception `zipimport.``ZipImportError`

  Виняток викликано об’єктами zipimporter. Це підклас `ImportError`, тому його також можна перехопити як `ImportError`.

## Об’єкти zipimporter

`zipimporter` — це клас для імпорту ZIP-файлів.

class `zipimport.``zipimporter`(archivepath)

  Створіть новий екземпляр zipimporter. архівний шлях має бути шляхом до ZIP-файлу або до певного шляху в ZIP-файлі. Наприклад, архівний шлях `foo/bar.zip/lib` шукатиме модулі в каталозі `lib` всередині ZIP-файлу `foo/bar.zip` (за умови, що воно існує).

  `ZipImportError` виникає, якщо архівний шлях не вказує на дійсний архів ZIP.

  `find_module`(fullname[, path])

    Search for a module specified by fullname. fullname must be the fully qualified (dotted) module name. It returns the zipimporter instance itself if the module was found, or `None` if it wasn’t. The optional path argument is ignored—it’s there for compatibility with the importer protocol.

  `get_code`(fullname)

    Return the code object for the specified module. Raise `ZipImportError` if the module couldn’t be found.

  `get_data`(pathname)

    Повертає дані, пов’язані з шляхом. Викликати `OSError`, якщо файл не знайдено.

    Змінено в версії 3.3: `IOError` used to be raised instead of `OSError`.

  `get_filename`(fullname)

    Return the value `__file__` would be set to if the specified module was imported. Raise `ZipImportError` if the module couldn’t be found.

    Нове в версії 3.1.

  `get_source`(fullname)

    Повернути вихідний код для вказаного модуля. Викликати `ZipImportError`, якщо модуль не вдалося знайти, повернути `None`, якщо архів містить модуль, але не має джерела для нього.

  `is_package`(fullname)

    Повертає `True`, якщо модуль, визначений повним ім’ям, є пакетом. Викликати `ZipImportError`, якщо модуль не вдалося знайти.

  `load_module`(fullname)

    Load the module specified by fullname. fullname must be the fully qualified (dotted) module name. It returns the imported module, or raises `ZipImportError` if it wasn’t found.

  `archive`

    Ім’я пов’язаного ZIP-файлу імпортера без можливого підшляху.

  `prefix`

    Підшлях у ZIP-файлі, де здійснюється пошук модулів. Це порожній рядок для об’єктів zipimporter, які вказують на корінь ZIP-файлу.

  Атрибути `archive` і `prefix` у поєднанні з косою рискою дорівнюють оригінальному аргументу archivepath, наданому конструктору `zipimporter`.

## Приклади

Ось приклад імпорту модуля з 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'