Как перезагрузить импортированный модуль.
Из соображений эффективности
модуль загружается только один раз за сеанс интерпретатора. Это хорошо для определений
функций и
классов, которые обычно составляют основную часть содержимого модуля. Но модуль также может содержать исполняемые операторы, обычно для инициализации.
Имейте в виду, что эти инструкции будут выполняться только при первом импорте модуля.
Файл mod.py
:
a = [100, 200, 300]
print('a =', a)
>>> import mod
a = [100, 200, 300]
>>> import mod
>>> import mod
>>> mod.a
[100, 200, 300]
>>> import mod
a = [100, 200, 300]
>>> import mod
>>> import importlib
>>> importlib.reload(mod)
a = [100, 200, 300]
Перезагрузка модуля импортированного конструкцией from <module> import <name>
.
При импорте с использованием
конструкции from <module> import <name>
,
<name>
считается частью импорта модуля, поэтому для его перезагрузки необходимо перезагрузить сам модуль
<module>
. Но просто перезагружая модуль
<module>
, вы все равно получите старый
<name>
- из уже ранее импортированного
<module>
, поэтому нужно при перезагрузки модуля
<module>
нужно обновить значение
<name>
, используя конструкцию ниже:
from <module> import <name>
# перезагрузка <name> модуля <module>
import importlib, sys
name = importlib.reload(sys.modules['module']).name