Existe-t-il un moyen pour qu'IPython recharge automatiquement tout le code modifié? Avant que chaque ligne ne soit exécutée dans l'environnement de ligne de commande, ou si elle échoue lorsque cela est spécifiquement demandé. Je fais beaucoup de programmation exploratoire avec IPython et SciPy et il est très pénible de devoir recharger manuellement chaque module à chaque fois que je le modifie.
Pour IPython version 3.1, 4.x et 5.x
%load_ext autoreload
%autoreload 2
Ensuite, votre module sera rechargé automatiquement par défaut. C'est le 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.
Il y a une astuce: quand vous oubliez tout de ce qui précède lorsque vous utilisez ipython
, essayez simplement:
import autoreload
?autoreload
# Then you get all the above
Comme mentionné ci-dessus, vous avez besoin de l'extension autoreload
. Si vous voulez qu'il démarre automatiquement chaque fois que vous lancez ipython
, vous devez l'ajouter au fichier ipython_config.py
fichier de démarrage:
Il peut être nécessaire d’en générer un d’abord:
ipython profile create
Ensuite, incluez ces lignes dans ~/.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')
En plus d’un avertissement facultatif au cas où vous auriez besoin de tirer parti du code compilé Python du code dans .pyc
des dossiers:
c.InteractiveShellApp.exec_lines.append('print "Warning: disable autoreload in ipython_config.py to improve performance." ')
edit: ce qui précède fonctionne avec les versions 0.12.1 et 0.13
RÉVISÉ - veuillez consulter Andrew_1510 réponse ci-dessous, car IPython a été mis à jour.
...
Il était un peu difficile de comprendre comment y arriver à partir d'un rapport de bogue poussiéreux, mais:
Il est livré avec IPython maintenant!
import ipy_autoreload
%autoreload 2
%aimport your_mod
# %autoreload? for help
... puis à chaque fois que vous appelez your_mod.dwim()
, la dernière version sera reprise.
si vous ajoutez ipython_config.py dans le répertoire ~/.ipython/profile_default avec les lignes ci-dessous, la fonctionnalité de chargement automatique sera chargée au démarrage de ipython (testé sur la version 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')
Vous pouvez utiliser:
import ipy_autoreload
%autoreload 2
%aimport your_mod
Il y a une extension pour ça, mais je n'ai pas encore d'expérience d'utilisation:
http://ipython.scipy.org/ipython/ipython/attachment/ticket/154/ipy_autoreload.py