How to autoreload packages while using them in IPython

I use IPython to interactively use and debug code that I edit in a text editor at the same time. Unfortunately, Python does not automatically reload packages and functions after an initial import foo, simply for performance reasons.

Fortunately, there is a solution: the IPython extension autoreload does what its name says: either all (how I use it) or only selected (imported using magic function %aimport) are refreshed, whenever I hit the Enter key. Here’s a short how-i-use-it demo, involving a minimal package foo with a helloworld function bar:

In [1]: %load_ext autoreload
In [2]: %autoreload 2
In [3]: import foo
In [4]: foo.bar()
Hello World!

In [5]: !cat foo.py
def bar():
    print('Hello World!\n')

In [6]: # edit foo.py in editor
In [7]: !cat foo.py
def bar():
    print('Hello me!\n')

In [8]: # bar() is automagically reloaded
In [9]: foo.bar()
Hello me!

How do you get it? It’s already bundled with IPython by default! Happy hacking!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.