Сообщить об ошибке.

Перезагрузка модуля в Python

Как перезагрузить импортированный модуль

Из соображений эффективности модуль загружается только один раз за сеанс интерпретатора. Это хорошо для определений функций и классов, которые обычно составляют основную часть содержимого модуля. Но модуль также может содержать исполняемые операторы, обычно для инициализации.

Имейте в виду, что эти инструкции будут выполняться только при первом импорте модуля.

Файл mod.py:

a = [100, 200, 300]
print('a =', a)
>>> import mod
a = [100, 200, 300]
>>> import mod
>>> import mod

>>> mod.a
[100, 200, 300]

Встроенная функция print() не выполняется при последующих импортах.

Если в модуль вносятся изменения то модуль нужно перезагружать, что бы изменения вступили в силу. Для этого нужно либо перезапустить интерпретатор, либо использовать функцию importlib.reload() из модуля importlib:

>>> 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