Recarga automática de módulos en IPython [duplicado]

Resuelto Thomas Parslow asked hace 14 años • 6 respuestas

¿Hay alguna manera de que IPython recargue automáticamente todo el código modificado? Ya sea antes de que se ejecute cada línea en el shell o, en su defecto, cuando se solicite específicamente. Estoy haciendo mucha programación exploratoria usando IPython y SciPy y es bastante complicado tener que recargar manualmente cada módulo cada vez que lo cambio.

Thomas Parslow avatar Dec 15 '09 21:12 Thomas Parslow
Aceptado

Para IPython versión 3.1, 4.x y 5.x

%load_ext autoreload
%autoreload 2

Entonces su módulo se recargará automáticamente de forma predeterminada. Este es el documento:

File:       ...my/python/path/lib/python2.7/site-packages/IPython/extensions/autoreload.py

Docstring:
``autoreload`` is an IPython extension that reloads modules
automatically before executing the line of code typed.

This makes for example the following workflow possible:

.. sourcecode:: ipython

   In [1]: %load_ext autoreload

   In [2]: %autoreload 2

   In [3]: from foo import some_function

   In [4]: some_function()
   Out[4]: 42

   In [5]: # open foo.py in an editor and change some_function to return 43

   In [6]: some_function()
   Out[6]: 43

The module was reloaded without reloading it explicitly, and the
object imported with ``from foo import ...`` was also updated.

Hay un truco: cuando olvides todo lo anterior al usar ipython, simplemente intenta:

import autoreload
?autoreload
# Then you get all the above
Andrew_1510 avatar May 06 '2012 17:05 Andrew_1510

Como se mencionó anteriormente, necesita la autoreloadextensión. Si desea que se inicie automáticamente cada vez que inicie ipython, debe agregarlo al ipython_config.pyarchivo de inicio:

Puede que sea necesario generar uno primero:

ipython profile create

Luego incluya estas líneas en ~/.ipython/profile_default/ipython_config.py:

c.InteractiveShellApp.exec_lines = []
c.InteractiveShellApp.exec_lines.append('%load_ext autoreload')
c.InteractiveShellApp.exec_lines.append('%autoreload 2')

Además de una advertencia opcional en caso de que necesite aprovechar el código Python compilado en .pycarchivos:

c.InteractiveShellApp.exec_lines.append('print("Warning: disable autoreload in ipython_config.py to improve performance.")')

editar: lo anterior funciona con las versiones 0.12.1 y 0.13

kara deniz avatar Dec 19 '2012 21:12 kara deniz