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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top