Question

    

Cette question a déjà une réponse ici:

    
            
  •              Rechargement en IPython sous-modules                                      11 réponses                          
  •     
    

Est-il possible d'avoir IPython rechargera automatiquement tout le code a changé? Soit avant chaque ligne est exécutée dans le shell ou à défaut lorsqu'il est expressément demandé à. Je fais beaucoup de programmes d'exploration en utilisant IPython et SciPy et il est tout à fait une douleur d'avoir à recharger manuellement chaque module chaque fois que je le change.

Était-ce utile?

La solution

Pour la version 3.1 IPython, 4.x et 5.x

%load_ext autoreload
%autoreload 2

Ensuite, votre module sera auto-reloaded par défaut. Ceci est la 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 un truc: quand vous tout oublier de ce qui précède lors de l'utilisation ipython, essayez:

import autoreload
?autoreload
# Then you get all the above

Autres conseils

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 ajouter au fichier de démarrage ipython_config.py:

Il peut être nécessaire de générer une première:

ipython profile create

Ensuite, ajoutez 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 en option au cas où vous avez besoin pour profiter de code Python compilé dans des fichiers .pyc:

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

edit: les ci-dessus fonctionne avec la version 0.12.1 et 0,13

REVISE - s'il vous plaît voir le répondre ci-dessous, IPython a été mis à jour

.

...

Il était un peu difficile chiffre comment 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

... alors chaque fois que vous appelez your_mod.dwim(), ça va chercher la dernière version.

si vous ajoutez ipython_config.py dans ~ / .ipython / dir profile_default avec des lignes comme ci-dessous alors la fonctionnalité de autoreload sera chargée au démarrage ipython (testé sur 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 cela, mais je n'ai encore aucune expérience d'utilisation:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top