Autoreload of modules in IPython [duplicate]

Is there a way to have IPython automatically reload all changed code? Either before each line is executed in the shell or failing that when it is specifically requested to. I'm doing a lot of exploratory programming using IPython and SciPy and it's quite a pain to have to manually reload each module whenever I change it.

2

6 Answers

For IPython version 3.1, 4.x, and 5.x

%load_ext autoreload %autoreload 2 

Then your module will be auto-reloaded by default. This is the 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. 

There is a trick: when you forget all of the above when using ipython, just try:

import autoreload ?autoreload # Then you get all the above 
5

As mentioned above, you need the autoreload extension. If you want it to automatically start every time you launch ipython, you need to add it to the ipython_config.py startup file:

It may be necessary to generate one first:

ipython profile create 

Then include these lines 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') 

As well as an optional warning in case you need to take advantage of compiled Python code in .pyc files:

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

edit: the above works with version 0.12.1 and 0.13

8

REVISED - please see Andrew_1510's answer below, as IPython has been updated.

...

It was a bit hard figure out how to get there from a dusty bug report, but:

It ships with IPython now!

import ipy_autoreload %autoreload 2 %aimport your_mod # %autoreload? for help 

... then every time you call your_mod.dwim(), it'll pick up the latest version.

7

If you add file ipython_config.py into the ~/.ipython/profile_default directory with lines like below, then the autoreload functionality will be loaded on IPython startup (tested on 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') 

You can use:

 import ipy_autoreload %autoreload 2 %aimport your_mod 

There is an extension for that, but I have no usage experience yet:

0

You Might Also Like