Autoreload di moduli in IPython [duplicato]
-
19-09-2019 - |
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.
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