Python Glossary English

все Python 3до 3.12Удалено из стандартной библиотекипонятие

imp

удалённые модули

Модуль для низкоуровневой работы с импортом: поиск, загрузка и перезагрузка модулей. Удалён в Python 3.12 — используйте importlib.

Синтаксис

import imp  # до 3.12

imp открывал внутренности старой системы импорта. С Python 3.1 её переписали на чистом Python в importlib, а imp стал обёрткой: в 3.4 его объявили устаревшим, в 3.12 убрали. Как переписать: imp.reload(m) → importlib.reload(m); imp.load_module(...) → importlib.import_module(name); imp.find_module(name) → importlib.util.find_spec(name); imp.new_module(name) → types.ModuleType(name); imp.get_magic() → importlib.util.MAGIC_NUMBER. Загрузка модуля из файла (бывший imp.load_source) — через importlib.util.spec_from_file_location() и module_from_spec(), как в примере.

Примеры

# Python 3.12+
try:
    import imp
except ModuleNotFoundError as e:
    print(type(e).__name__)  # → ModuleNotFoundError
# Python 3.12+
import importlib, importlib.util, types
json = importlib.import_module('json')
print(importlib.reload(json).__name__)  # → json
print(importlib.util.find_spec('json') is not None)  # → True
print(types.ModuleType('demo').__name__)  # → demo
# Python 3.12+
import importlib.util
with open('plugin.py', 'w') as f:
    f.write('VALUE = 7\n')
spec = importlib.util.spec_from_file_location('plugin', 'plugin.py')
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
print(module.VALUE)  # → 7
import imp, json
print(imp.reload(json).__name__)  # → json
print(imp.new_module('demo').__name__)  # → demo

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности