Domanda

    

Questa domanda ha già una risposta qui:

    
            
  •              ricaricamento sottomoduli in IPython                                      11 risposte                          
  •     
    

C'è un modo per avere IPython ricaricare automaticamente tutto il codice cambiato? Sia prima di ogni linea viene eseguita nella shell o, altrimenti quando viene espressamente richiesto. Sto facendo un sacco di programmazione esplorativa utilizzando IPython e SciPy ed è abbastanza un dolore di dover ricaricare manualmente ogni modulo ogni volta che lo cambio.

È stato utile?

Soluzione

Per la versione IPython 3.1, 4.x, 5.x

%load_ext autoreload
%autoreload 2

Poi il modulo sarà auto-ricaricati per impostazione predefinita. Questo è il 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.

C'è un trucco: quando si dimenticare tutto di quanto sopra quando si utilizza ipython, basta provare:

import autoreload
?autoreload
# Then you get all the above

Altri suggerimenti

Come accennato in precedenza, è necessario l'estensione autoreload. Se si desidera che venga avviato automaticamente ogni volta che si avvia ipython, è necessario aggiungere al file di avvio ipython_config.py:

Potrebbe essere necessario generare una prima:

ipython profile create

Quindi includere queste righe in ~/.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')

Così come un avvertimento facoltativa in caso di necessità di usufruire di codice Python compilato nei file .pyc:

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

modifica: le opere di cui sopra con la versione 0.12.1 e 0.13

REVISIONE - vedere rispondere di seguito, come è stato aggiornato IPython

.

...

E 'stata una figura po' difficile capire come arrivare da un bug report polveroso, ma:

navi con IPython ora!

import ipy_autoreload
%autoreload 2
%aimport your_mod

# %autoreload? for help

... poi ogni volta che si chiama your_mod.dwim(), sarà prendere l'ultima versione.

se si aggiunge ipython_config.py in ~ / .ipython / profile_default dir con linee come sotto quindi la funzionalità autoreload verrà caricato all'avvio ipython (testato su 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')

È possibile utilizzare:

  import ipy_autoreload
  %autoreload 2 
  %aimport your_mod

Non è un'estensione per questo, ma non ho ancora esperienza di utilizzo:

http://ipython.scipy.org/ipython /ipython/attachment/ticket/154/ipy_autoreload.py

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top