Recarga automática de módulos en IPython [duplicado]
¿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.
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
Como se mencionó anteriormente, necesita la autoreload
extensión. Si desea que se inicie automáticamente cada vez que inicie ipython
, debe agregarlo al ipython_config.py
archivo 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 .pyc
archivos:
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