重置时重新加载

时间:2012-10-01 08:08:26

标签: python

我需要在python中完全重载模块。 “我完全”的意思是我没有 想要以下功能(来自python 2.6 docs for builtin reload function):

  

“...如果新版本的模块没有定义旧版本定义的名称   版本,旧的定义仍然是......“。

即。我不希望保留在新模块版本中消失的旧名称。

实现这一目标的最佳做法是什么?

谢谢!

1 个答案:

答案 0 :(得分:3)

sys.modules删除模块并重新导入可能是一个开始,虽然我没有测试它超出以下范围:

import itertools

itertools.TEST = 7
reload(itertools)
print itertools.TEST
# 7

import sys
del sys.modules['itertools']
import itertools
print itertools.TEST

#Traceback (most recent call last):
#  File "/home/jon/stackoverflow/12669546-reload-with-reset.py", line 10, in <module>
#    print itertools.TEST
# AttributeError: 'module' object has no attribute 'TEST'

使用第三方模块进行测试

>>> import pandas
>>> import sys
>>> del sys.modules['pandas']
>>> import pandas
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    import pandas
  File "/usr/local/lib/python2.7/dist-packages/pandas-0.7.3-py2.7-linux-x86_64.egg/pandas/__init__.py", line 10, in <module>
    import pandas._tseries as lib
AttributeError: 'module' object has no attribute '_tseries'
>>> to_del = [m for m in sys.modules if m.startswith('pandas.')]
>>> for td in to_del:
    del sys.modules[td]

>>> import pandas
>>> # now it works