Autoreload de módulos en IPython [duplicado]
-
19-09-2019 - |
Pregunta
Esta pregunta ya tiene una respuesta aquí:
- Recarga submódulos en IPython 11 respuestas
¿Hay una manera de tener IPython recargar automáticamente todo el código cambiado? Ya sea antes de cada línea se ejecuta en la cáscara o en su defecto cuando se solicita específicamente a. Estoy haciendo una gran cantidad de programación exploratorio utilizando IPython y SciPy y es bastante un dolor a tener que recargar manualmente cada módulo cada vez que lo cambio.
Solución
Para la versión IPython 3.1, 4.x, 5.x
%load_ext autoreload
%autoreload 2
A continuación, el módulo será auto-recargado de forma predeterminada. Este es el doc:
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 olvidar todo de lo anterior cuando se utiliza ipython
, sólo tratar:
import autoreload
?autoreload
# Then you get all the above
Otros consejos
Como se mencionó anteriormente, es necesario la extensión autoreload
. Si desea que se inicie automáticamente cada vez que inicie ipython
, es necesario agregar al archivo de inicio ipython_config.py
:
Puede ser necesario para generar una primera:
ipython profile create
A continuación, incluir 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')
Así como una advertencia opcional en caso de que necesite para tomar ventaja de código Python compilado en archivos .pyc
:
c.InteractiveShellApp.exec_lines.append('print "Warning: disable autoreload in ipython_config.py to improve performance." ')
editar: los trabajos anteriores con la versión 0.12.1 y 0.13
REVISADO - por favor ver responder a continuación, como IPython se ha actualizado
....
Fue una figura poco difícil encontrar la manera de llegar desde un informe de error de polvo, pero:
Viene con IPython ahora!
import ipy_autoreload
%autoreload 2
%aimport your_mod
# %autoreload? for help
... entonces cada vez que llame your_mod.dwim()
, que va a recoger la versión más reciente.
si se agrega ipython_config.py en ~ / .ipython / profile_default dir con líneas como de abajo y funcionalidad autoreload se cargará en el arranque 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')
Puede utilizar:
import ipy_autoreload
%autoreload 2
%aimport your_mod
No es una extensión para eso, pero no tengo ninguna experiencia de uso aún:
http://ipython.scipy.org/ipython /ipython/attachment/ticket/154/ipy_autoreload.py