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

`importlib` - Реалізація механізму імпорту

  Пакет із відповідними протоколами для впровадження всім імпортерам.

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

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.

  create_module(spec)

    Реалізація `importlib.abc.Loader.create_module()`, яка повертає `None` для явного запиту семантики за замовчуванням.

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

  exec_module(module)

    Реалізація `importlib.abc.Loader.exec_module()`.

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

  find_loader(fullname, path=None)

    An implementation of `importlib.abc.PathEntryFinder.find_loader()`.

    Застаріло починаючи з версії 3.10: Use `find_spec()` instead.

  find_module(fullname, path=None)

    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.

    Застаріло починаючи з версії 3.10: Use `find_spec()` instead.

  find_spec(fullname, target=None)

    Реалізація `importlib.abc.PathEntryFinder.find_spec()`.

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

  get_code(fullname)

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

  get_data(pathname)

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

    Змінено в версії 3.3: `IOError` раніше викликався, тепер це псевдонім `OSError`.

  get_filename(fullname)

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

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

  get_source(fullname)

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

  is_package(fullname)

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

  load_module(fullname)

    Завантажте модуль, указаний повним ім’ям. повне ім’я має бути повним ім’ям модуля (з крапками). Повертає імпортований модуль у разі успіху, викликає `ZipImportError` у разі невдачі.

    Застаріло починаючи з версії 3.10: Замість цього використовуйте `exec_module()`.

  invalidate_caches()

    Очистіть внутрішній кеш інформації про файли, знайдені в архіві ZIP.

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

  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'