trouble with reload
Steven D'Aprano
steve at REMOVE-THIS-cybersource.com.au
Fri Aug 14 11:24:42 EDT 2009
On Fri, 14 Aug 2009 09:23:17 -0400, Colin J. Williams wrote:
> It's typically a user module that needs to be reloaded.
What's a user module?
> It seems that del sys.modules['moduleName'] has no effect.
sys.modules is just a dictionary, I find it hard to believe that deleting
from it has no effect. It works for me:
>>> import sys
>>> import math
>>> 'math' in sys.modules
True
>>> del sys.modules['math']
>>> 'math' in sys.modules
False
What behaviour do you get?
Of course deleting the math module from the cache doesn't do anything to
the math module in your namespace:
>>> math
<module 'math' from '/usr/lib/python2.5/lib-dynload/mathmodule.so'>
>>> del math
>>> math
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'math' is not defined
Of course deleting the module (or reloading it) doesn't have any effect
on any objects you already have:
>>> import math
>>> func = math.sin
>>> del sys.modules['math']
>>> del math
>>> math.sin(1.2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'math' is not defined
>>> func(1.2)
0.93203908596722629
> Is there some other way of ensuring that any import goes to
> moduleName.py, instead of moduleName.pyc?
Delete moduleName.pyc.
Make sure the .pyc file doesn't exist in the first place.
Make sure the last modification date of the .py file is newer than the
modification date of the .pyc file.
--
Steven
More information about the Python-list
mailing list