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.Змінено в версії 3.12: Methods
find_loader()
andfind_module()
, deprecated in 3.10 are now removed. Usefind_spec()
instead.- create_module(spec)¶
Реалізація
importlib.abc.Loader.create_module()
, яка повертаєNone
для явного запиту семантики за замовчуванням.Added in version 3.10.
- exec_module(module)¶
Реалізація
importlib.abc.Loader.exec_module()
.Added in version 3.10.
- find_spec(fullname, target=None)¶
Реалізація
importlib.abc.PathEntryFinder.find_spec()
.Added in version 3.10.
- get_code(fullname)¶
Повертає об’єкт коду для зазначеного модуля. Викликати
ZipImportError
, якщо модуль не вдалося імпортувати.
- get_filename(fullname)¶
Повернути значення
__file__
було б встановлено, якби вказаний модуль було імпортовано. ВикликатиZipImportError
, якщо модуль не вдалося імпортувати.Added in version 3.1.
- get_source(fullname)¶
Повернути вихідний код для вказаного модуля. Викликати
ZipImportError
, якщо модуль не вдалося знайти, повернутиNone
, якщо архів містить модуль, але не має джерела для нього.
- is_package(fullname)¶
Повертає
True
, якщо модуль, визначений повним ім’ям, є пакетом. ВикликатиZipImportError
, якщо модуль не вдалося знайти.
- load_module(fullname)¶
Завантажте модуль, указаний повним ім’ям. повне ім’я має бути повним ім’ям модуля (з крапками). Повертає імпортований модуль у разі успіху, викликає
ZipImportError
у разі невдачі.Застаріло починаючи з версії 3.10: Замість цього використовуйте
exec_module()
.
- invalidate_caches()¶
Очистіть внутрішній кеш інформації про файли, знайдені в архіві ZIP.
Added in version 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'