все 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Сообщить о неточности