Aunque las respuestas proporcionadas funcionan para un módulo específico, no volverán a cargar submódulos, como se indica en esta respuesta :
Si un módulo importa objetos de otro módulo usando from ... import ...
, llamar reload()
al otro módulo no redefine los objetos importados de él; una forma de evitar esto es volver a ejecutar la declaración from, otra es usar import
nombres calificados ( module.*name*
).
Sin embargo, si usa la __all__
variable para definir la API pública, es posible volver a cargar automáticamente todos los módulos disponibles públicamente:
# 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)
Sin embargo, las advertencias señaladas en la respuesta anterior siguen siendo válidas. En particular, la modificación de un submódulo que no es parte de la API pública como se describe en la __all__
variable no se verá afectada por una recarga que use esta función. Del mismo modo, la eliminación de un elemento de un submódulo no se reflejará en una recarga.