Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Cashing in PythonWin name space?... seems unexpected to me

0 views
Skip to first unread message

bsneddon

unread,
Oct 8, 2009, 9:47:17 AM10/8/09
to
I saw an issue on winXP box not connected to internet yesterday,
where i was running
a script in the interactive window on PythonWin . I would modify the
script save and
import and was still running the old version. I did that several
times with same result.
I even renamed the function and it showed up but ran the old script.
Very strange.

I tried reproducing this morning on a machine that is connected to
internet was unable to
but did get the behavior below that I do not understand.

created module named spam with this code.
def ello():
print "Your father smells of elderberrys"

Here is expert for interactive window to explain the issue: question
is below.

PythonWin 2.6 (r26:66721, Oct 2 2008, 11:35:03)
I


renamed ello to insult and re-imported.

>>> dir(spam)
[clip.. 'ello', 'insult']

ello still exist in namespace an runs ... not so strange
>>> spam.ello()
Your father smells of elderberrys

>>> del(spam)
delete spam and it no longer runs as expected.

modify insult to this:
def insult():
print "Your father smells of elderberrys/n and your mother was a
kiniggit"

Q.
on re-importing spam ello is back and continues to run. I did note
expect this to be the
case. Can someone explain what is happening?

>>> dir(spam)
[clip..., 'ello', 'insult']
>>> spam.ello()
Your father smells of elderberrys
>>> spam.insult()
Your father smells of elderberrys/n and your mother was a kiniggit
>>>


Thanks for your help.

Bill Sneddon

Simon Forman

unread,
Oct 8, 2009, 12:45:44 PM10/8/09
to bsneddon, pytho...@python.org

The reload() function might be what you need:
http://docs.python.org/library/functions.html#reload

HTH,
~Simon

Dave Angel

unread,
Oct 8, 2009, 2:12:15 PM10/8/09
to bsneddon, pytho...@python.org
bsneddon wrote:
> I saw an issue on winXP box not connected to internet yesterday,
> where i was running
> a script in the interactive window on PythonWin . I would modify the
> script save and
> import and was still running the old version. I did that several
> times with same result.
> I even renamed the function and it showed up but ran the old script.
> Very strange.
> <snip>
>
>
Caching (not cashing) doesn't come into play here. Objects are kept as
long as there is a reference to them somewhere. So renamed functions
can still exist under their old name, since nobody has reused the name
for something newer.

I'm not familiar with PythonWin. But if it's like the standard python
interpreter, where you use import at the command line to load a module,
then I can comment on it.

Doing a second import on the same module will not look at the disk file
at all. To get it to re-read the source code, you need reload(). And
reload() doesn't really do everything you'd expect. In some cases it
cannot (for example, references to external DLL's). So there are
frequently remnants of the earlier version of things lying around.

If this is really an interpreter environment, I'd exit the environment
and start it again. If it's more like a GUI (like Komodo, which I
use), then the gui will kill the old interpreter and start another one
when you say "exit" and "run". Then you have nothing left of the old
version of the module, and can start from scratch.

As Simon said, you should read about reload(), and its caveats:
http://docs.python.org/library/functions.html#reload

DaveA

w.g.s...@gmail.com

unread,
Oct 8, 2009, 4:27:22 PM10/8/09
to

Thanks I have looked at reload now. It seem pythonWin tries to use
reload
when doing an import. I think I need to do a little more reading on
PythonWin.

Bill

0 new messages