Embora as respostas fornecidas funcionem para um módulo específico, elas não recarregam os submódulos, conforme observado em Esta resposta :
Se um módulo importa objetos de outro módulo usando from ... import ..., chamar reload()o outro módulo não redefine os objetos importados - uma maneira de contornar isso é reexecutar a instrução from, outra é usar importnomes qualificados ( module.*name*).
No entanto, se estiver usando a __all__variável para definir a API pública, é possível recarregar automaticamente todos os módulos disponíveis ao público:
# 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)
As advertências observadas na resposta anterior ainda são válidas. Notavelmente, a modificação de um submódulo que não faz parte da API pública, conforme descrito pela __all__variável, não será afetada por um recarregamento usando esta função. Da mesma forma, a remoção de um elemento de um submódulo não será refletida por uma recarga.