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_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'