How to clean a module?

ai ai.nature at gmail.com
Fri Jun 1 04:29:09 CEST 2007


Perhaps you misundstand me. I means if you reedit a module file and
reload it, the interpreter doesn't follow the change you have made
exactly.
For example, you import a module,  edit the module file (you may
remove a global variable or change its name), save the change, reload
the module (or del the module and import it again). At last, you will
find the origin variable still exists in the interpreter.
If you don't notice this, you may meet some strange problems when you
do refacting.


On Jun 1, 12:17 am, Maric Michaud <m... at aristote.info> wrote:
> ai a écrit :
>
> > It assumes that there is a module A which have two global variables X
> > and Y. If I run "import A" in the IDLE shell, then I can use A.X and
> > A.Y correctly. But if I want to change the module A and then delete
> > the variable Y, I find I can use A.Y just the same as before!
>
> It's unlikely to be true, see below.
>
> > In fact, I have tried all the following methods but can't remove the
> > A.Y:
> > execute "import A" again
> > "reload(A)"
> > "del A; import A"
> > Yes, if you use "del A.Y", it works. But it is stupid since there are
> > probably many names. In my thought, if no one references objects in A,
> > "del A" will release all memory about A. But it seems that the fact is
> > not. So I can not refresh the namespace to follow changes of a module
> > easily and I will worry about the memory if I del a module.
> > I want to know if there is a way to clear a module entirely.
>
> Actually I do not see your problem and your exact need, when I type the
> following in python prompt I just see expected behavior, what is a
> problem to you ? Maybe you could post a code explaining it.
>
> In [64]: import a
>
> In [65]: a.X
>
> Out[65]: 0
>
> In [66]: a.X = 2
>
> In [67]: del a
>
> In [68]: import a as b
>
> In [69]: b.X
>
> Out[69]: 2
>
> In [71]: for name in [ n for n in b.__dict__ if not n.startswith('__') ]
> :
>     ....:     b.__dict__.__delitem__(name)
>
>     ....:
>
>     ....:
>
> In [72]: b.X
>
> ---------------------------------------------------------------------------
>
> <type 'exceptions.AttributeError'>        Traceback (most recent call
> last)
>
> C:\Documents and Settings\maric\Bureau\<ipython console> in <module>()
>
> <type 'exceptions.AttributeError'>: 'module' object has no attribute 'X'
>
> In [73]: reload(b)
>
> Out[73]: <module 'a' from 'a.pyc'>
>
> In [74]: b.X
>
> Out[74]: 0
>
> In [75]: del b.X
>
> In [76]: del b
>
> In [77]: import a
>
> In [78]: a.b
>
> ---------------------------------------------------------------------------
>
> <type 'exceptions.AttributeError'>        Traceback (most recent call
> last)
>
> C:\Documents and Settings\maric\Bureau\<ipython console> in <module>()
>
> <type 'exceptions.AttributeError'>: 'module' object has no attribute 'b'





More information about the Python-list mailing list