library - Autoreload de módulos en IPython
jupyter notebook reload library (6)
Como se mencionó anteriormente, necesita la extensión de autoreload
. Si desea que se inicie automáticamente cada vez que inicie ipython
, debe agregarlo al archivo de inicio ipython_config.py
:
Puede ser 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 archivos .pyc
:
c.InteractiveShellApp.exec_lines.append(''print "Warning: disable autoreload in ipython_config.py to improve performance." '')
editar: lo anterior funciona con la versión 0.12.1 y 0.13
Esta pregunta ya tiene una respuesta aquí:
- Recarga de submódulos en IPython 8 respuestas
¿Hay alguna manera de que IPython recargue automáticamente todo el código modificado? O bien antes de que cada línea se ejecute en el intérprete de comandos o en su defecto cuando se solicite específicamente. Estoy haciendo una gran cantidad de programación exploratoria utilizando IPython y SciPy, y es bastante doloroso tener que volver a cargar manualmente cada módulo cada vez que lo cambio.
Hay una extensión para eso, pero todavía no tengo experiencia en el uso:
http://ipython.scipy.org/ipython/ipython/attachment/ticket/154/ipy_autoreload.py
Para IPython versión 3.1, 4.x y 5.x
In [1]: %load_ext autoreload
In [2]: %autoreload 2
Entonces su módulo será recargado automáticamente por defecto. 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 te olvidas de todo lo anterior cuando usas ipython
, simplemente prueba:
import autoreload
?autoreload
# Then you get all the above
Puedes usar:
import ipy_autoreload
%autoreload 2
%aimport your_mod
REVISADO: consulte la answer de Andrew_1510 a continuación, ya que IPython se ha actualizado.
...
Fue un poco difícil averiguar cómo llegar desde un informe de error polvoriento, pero:
¡Ahora viene con IPython!
import ipy_autoreload
%autoreload 2
%aimport your_mod
# %autoreload? for help
... luego, cada vez que llame a your_mod.dwim()
, recogerá la última versión.
si agrega ipython_config.py en ~ / .ipython / profile_default dir con las líneas siguientes, la funcionalidad de autorecarga se cargará en el inicio de ipython (probado en 2.0.0):
print "--------->>>>>>>> ENABLE AUTORELOAD <<<<<<<<<------------"
c = get_config()
c.InteractiveShellApp.exec_lines = []
c.InteractiveShellApp.exec_lines.append(''%load_ext autoreload'')
c.InteractiveShellApp.exec_lines.append(''%autoreload 2'')