Python 3.4+importlibфункция
importlib.reload()
перезагрузка и кэши
Заново исполняет код уже импортированного модуля и обновляет его объект на месте; нужна в REPL и Jupyter после правки файла.
Синтаксис
module = importlib.reload(module)
Обновляется только сам объект модуля: имена, взятые через from m import x, по-прежнему указывают на старые значения, а экземпляры старых классов остаются экземплярами старых классов, и isinstance с новым классом даёт False. Аргумент — модуль, а не строка: reload('m') поднимает TypeError. Имена, удалённые из файла, в модуле не исчезают — reload не очищает его словарь.
Примеры
import importlib, sys
sys.path.insert(0, '.')
with open('cfg.py', 'w') as f:
f.write('VALUE = 1\n')
import cfg
from cfg import VALUE
with open('cfg.py', 'w') as f:
f.write('VALUE = 200 # changed\n')
importlib.reload(cfg)
print(cfg.VALUE, VALUE) # → 200 1 — from-импорт остался старым
try:
importlib.reload('cfg')
except TypeError as e:
print(e) # → reload() argument must be a module
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности