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

B

bsneddon

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.
[clip.. 'ello', 'insult']

ello still exist in namespace an runs ... not so strangeYour father smells of elderberrys
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
 
S

Simon Forman

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.
[clip.. 'ello', 'insult']

ello still exist in namespace an runs ... not so strangeYour father smells of elderberrys
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

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

HTH,
~Simon
 
D

Dave Angel

bsneddon said:
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

w.g.sneddon

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

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,985
Messages
2,570,199
Members
46,766
Latest member
rignpype

Latest Threads

Top