I have a foo.py
def foo():
print "test"
In IPython I use:
In [6]: import foo
In [7]: foo.foo()
test
Then I changed the foo()
to:
def foo():
print "test changed"
In IPython, the result for invoking is still test
:
In [10]: import foo
In [11]: foo.foo()
test
Then I use:
In [15]: del foo
In [16]: import foo
In [17]: foo.foo()
test
I delete the foo.pyc
in same folder foo.py
exists, but still no luck.
May I know how to reimport the updated code in runtime?
In addition to gnibbler's answer:
This changed in Python 3 to:
As @onnodb points out,
imp
is deprecated in favor ofimportlib
since Python 3.4:IPython3's autoreload feature works just right.
I am using the actual example from the webpage. First load the 'autoreload' feature.
Then import the module you want to test:
Open foo.py in an editor and change some_function to return 43
It also works if you import the function directly.
Make change in some_function to return 43.
For Python 2.x
For Python 3.x
If you want this to happen automatically, there is the autoreload module that comes with iPython.