logo

Recargar módulos en Python

Se nos presenta un caso en el que queremos actualizar y probar un módulo de Python sin reiniciar el intérprete. Esto es especialmente útil durante el desarrollo cuando modifica archivos de módulos externamente y desea que esos cambios se reflejen de inmediato. Python nos permite recargar un módulo previamente importado usando la función reload(). Por ejemplo Si ha editado un archivo de utilidad utils.py mientras se ejecuta el script, la recarga le permite volver a importar el contenido actualizado sin reiniciar el shell de Python.

¿Cuándo debería recargar un módulo?

  • Durante la depuración o pruebas en vivo
  • Cuando se utilizan intérpretes interactivos como IPython o Jupyter
  • Mientras desarrolla complementos o sistemas modulares
  • Para reflejar los cambios realizados en archivos .py externos sin reiniciar la sesión

Recarga de módulos en Python 2.x

En Python 2.x, puede usar directamente la función reload() incorporada para recargar un módulo que se importó previamente.

Python
import mymodule # Modify 'mymodule.py' externally here... reload(mymodule) 

Explicación:



  • mymodule se importa primero mediante import.
  • Después de realizar cambios externos en mymodule.py, llamar a reload(mymodule) recarga la versión actualizada sin reiniciar el intérprete.
  • No es necesario volver a importar: reload() funciona en un objeto de módulo ya importado.

Recarga de módulos en Python 3.0 a 3.3

En las versiones 3.0 a 3.3 de Python, se eliminó la función incorporada reload(). En su lugar, debes importarlo desde el módulo imp.

Python
import mymodule import imp # Modify 'mymodule.py' externally... imp.reload(mymodule) 

Explicación:

  • Primero se importa mymodule como de costumbre.
  • El módulo imp proporciona la función reload() durante este rango de versiones.
  • Después de editar mymodule.py imp.reload(mymodule) recarga el módulo con los cambios actualizados.

Nota: El módulo imp está en desuso a partir de Python 3.4 y se reemplaza por importlib.

Recarga de módulos en Python 3.4 y superiores

A partir de Python 3.4, la forma recomendada de recargar un módulo es mediante importlib.reload().

Python
import mymodule import importlib # Modify 'mymodule.py' externally... importlib.reload(mymodule) 

Explicación:

tostring java
  • mymodule se importa primero normalmente.
  • Luego importlib.reload(mymodule) recarga el módulo actualizado.
  • Esta es la forma actual y oficial de recargar módulos en Python 3.4+.

Nota: Utilice este método en todos los scripts y cuadernos de Python modernos cuando pruebe los cambios de módulo.

¿Puedes descargar un módulo en Python?

Actualmente, Python no proporciona una forma integrada de descargar completamente un módulo una vez importado. Una vez que un módulo se carga en la memoria, permanece disponible en sys.modules hasta que finaliza el programa. Aunque puedes eliminar un módulo de sys.modules, esto no garantiza su eliminación completa de la memoria o que sus referencias desaparezcan:

Python
import mymodule import sys del sys.modules['mymodule'] 


Esto solo eliminará el módulo de la caché sys.modules. Si alguna variable u objeto todavía hace referencia al módulo, no se descargará por completo.

¿Por qué no se admite la descarga?

  • Python gestiona módulos globalmente en la memoria.
  • La descarga dinámica podría generar un comportamiento inconsistente si partes de su código aún contienen referencias al módulo anterior.