re-importing modules
Carsten Haese
carsten at uniqsys.com
Mon Apr 30 16:00:09 EDT 2007
On Mon, 2007-04-30 at 12:44 -0700, kyosohma at gmail.com wrote:
> On Apr 30, 12:49 pm, "T. Crane" <tcr... at REMOVETHISuiuc.edu> wrote:
> > Hi,
> >
> > When troubleshooting code that's saved in a text file, I often find that I
> > want to make a change to it, re-save it, then reimport it. However, just
> > typing
> >
> > import myTestCode
> >
> > doesn't always seem to import the newer version. Is it supposed to? I find
> > that right now I often have to close my iPython window, then reopen it and
> > import my recently modified code. I know this can't be the best way to do
> > this, but I don't know what is.
> >
> > any suggestions/help welcome and appreciated,
> > trevis
>
> Hi,
>
> Another person posted the same thing today. As with that person, you
> probably need to use the reload() function. See this post for more
> details:
>
> http://www.python.org/search/hypermail/python-1993/0342.html
>
> Mike
>
In addition to the warning that reload() does not recursively reload
modules that the reloaded module depends on, be warned that reloading a
module does not magically affect any functions or objects from the old
version that you may be holding on to. For example:
Module code:
# dog.py
class dog(object):
def bark(self): print "Arf!"
Interactive session:
>>> import dog
>>> d = dog.dog()
>>> d.bark()
Arf!
>>> # Now the module code is being changed in another window...
>>> reload(dog)
<module 'dog' from 'dog.py'>
>>> # A new dog instance will now say Woof:
>>> d2 = dog.dog()
>>> d2.bark()
Woof!
>>> # But the dog instance from before still says Arf:
>>> d.bark()
Arf!
This may or may not be a problem for you, but the bottom-line is that
reload must be used with caution.
-Carsten
More information about the Python-list
mailing list