![]() |
Cashing in PythonWin name space?... seems unexpected to me
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 |
Re: Cashing in PythonWin name space?... seems unexpected to me
On Thu, Oct 8, 2009 at 9:47 AM, bsneddon <bsneddon@yahoo.com> 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. > > 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 The reload() function might be what you need: http://docs.python.org/library/functions.html#reload HTH, ~Simon |
Re: Cashing in PythonWin name space?... seems unexpected to me
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 |
Re: Cashing in PythonWin name space?... seems unexpected to me
On Oct 8, 2:12*pm, Dave Angel <da...@ieee.org> wrote:
> 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 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 |
| All times are GMT. The time now is 09:19 PM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.