Хотя предоставленные ответы работают для определенного модуля, они не будут перезагружать подмодули, как отмечено в этом ответе :
Если модуль импортирует объекты из другого модуля, используя from ... import ..., вызов reload()другого модуля не переопределяет импортированные из него объекты - одним из способов является повторное выполнение оператора from, другой - использование importи квалифицированные names ( module.*name*).
Однако при использовании __all__переменной для определения общедоступного API можно автоматически перезагрузить все общедоступные модули:
# Python >= 3.5
import importlib
import types
def walk_reload(module: types.ModuleType) -> None:
if hasattr(module, "__all__"):
for submodule_name in module.__all__:
walk_reload(getattr(module, submodule_name))
importlib.reload(module)
walk_reload(my_module)
Предостережения, отмеченные в предыдущем ответе, остаются в силе. В частности, изменение подмодуля, который не является частью общедоступного API, как описано в __all__переменной, не будет затронуто перезагрузкой с использованием этой функции. Точно так же удаление элемента субмодуля не будет отражено перезагрузкой.