Contenido

ipython autoreload

Cuando alguien está chalao, escribe un intérprete de su lenguaje favorito.

Cuando alguien está loco del todo, escribe ipython.

Resulta difícil describir qué es ipython… Ya que resulta difícil saber qué no es. Quedémonos con que es un intérprete de Python con esteroides.

Uno de esos esteroides es que nos permite recargar automáticamente los módulos en cuanto cambia algún fichero. Y aquí os explico cómo hacerlo.

Python

Método manual

Arrancamos ipython y cargamos la extensión “autoreload”:

1
2
$ ipython
In [1]: %load_ext autoreload

Ya tenemos cargada la extensión, pero no la estamos usando. Vamos a ello:

1
In [2]: %autoreload 2

Y ya está :)

Otros modos

Los modos son:

  • 0: deshabilitado
  • 1: recarga los módulos importados con %aimport
  • 2: recarga los módulos importados de forma habitual, pero no con %aimport.

Autoreload automático

Si nos ha gustado el invento, podemos habilitarlo “para siempre”. Para ello, basta con crearnos un perfil de configuración de ipython:

1
2
3
$ ipython profile create
[ProfileCreate] Generating default config file: '/home/whatever/.ipython/profile_default/ipython_config.py'
$

Ahora editamos el archivo que se nos indica, de manera que tenga las siguientes claves:

1
2
3
4
5
c.InteractiveShellApp.extensions = ['autoreload']
c.InteractiveShellApp.exec_lines = [
    '%autoreload 2',
    'print("Warning: disable autoreload in ipython_config.py to improve performance.")',
]

Advertencias

Eso de la recarga de módulos automática está muy chulo, pero es difícil de narices. Así que no lo uséis con cosas muy importantes porque es fácil que falle y tengáis que seguir el antiguo método de cerrar la terminal ipython y abrir otra.

Además, los objetos ya creados no se actualizarán. Éstos ya tienen sus métodos definidos y no se pueden cambiar “en caliente”, ya que no se puede determinar cuáles de ellos son dinámicos y cuáles estáticos.

Tenéis más información y otras advertencias en la documentación.