[Tutor] Importing functions in IPython
Steven D'Aprano
steve at pearwood.info
Sun Jan 22 23:39:57 CET 2012
On Mon, Jan 23, 2012 at 03:40:26AM +0530, Jaidev Deshpande wrote:
> Dear List,
>
> Suppose I have a function myfunc() in a module called mymodule.py
[...]
> Now when I delete the original function and import the changed one,
>
> In[2]: del myfunc
> In[3]: from mymodule import myfunc
>
> it doesn't work as per the new changes. I have to close IPython and
> start all over again.
As far as I know, this is not an IPython specific problem, but is due to
the way Python imports modules.
Here are two alternatives:
1) Instead of "from mymodule import myfunc", instead use
import mymodule
result = mymodule.myfunc() # not myfunc() on its own
After changing the source file, do "reload(mymodule)" and Python will
pick up the changes.
2) You can manually force a reload:
import sys
del sys.modules['mymodule']
from mymodule import myfunc
But two warnings:
* reload() is very simple-minded. It is not guaranteed to change the
behaviour of existing objects just because the module is reloaded. The
most common example of this is if you use classes: reloading the module
after modifying the class will NOT change the behaviour of any existing
instances. E.g.:
import mymodule
instance = mymodule.MyClass()
# now edit MyClass in mymodule and change the method behaviour
reload(mymodule)
instance.method() # instance will keep the OLD behaviour, not the new
* Because reload() so often doesn't work as expected, in Python 3, it
has been removed from the built-ins and is now found in the imp module.
--
Steven
More information about the Tutor
mailing list