首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复位重装

复位重装
EN

Stack Overflow用户
提问于 2012-10-01 08:08:25
回答 1查看 1.2K关注 0票数 0

我需要在python中完全重新加载一个模块。我所说的“完全”的意思是,我不需要以下特性(来自python2.6docs的内置重新加载函数):

"...If模块的新版本不定义由旧版本定义的名称,旧定义仍然是.“。

也就是说,我不想保留在新模块版本中消失的旧名字。

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

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2012-10-01 10:23:32

sys.modules中删除模块并重新导入可能是一个开始,尽管我还没有对其进行以下测试:

代码语言:javascript
复制
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'

用第三方模块进行测试

代码语言:javascript
复制
>>> 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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12669546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档