2014-02-07 65 views
3

我很清楚,在Python 2中没有干净的解决方案来卸载模块,这是一个已知的错误,它被设置为纠正。在Python 3.x中卸载模块

的帖子:

How do I unload (reload) a Python module? Remove an imported python module

2009年全年和2010年证实了这一缺乏卸载模块支持的

我不知道这是否在Python 3.x中解决。当我这样做时,import os,del os,dir()os模块不存在(至少不可见,可用)。它消失了吗?

+0

'import os;德洛斯;断言'os'不在dir()中也存在于Python 2中。 – delnan

+0

好吧,那将是知道内存是否被释放的错误方法。 –

+1

检查'sys.modules',而不是'dir'。 – geoffspear

回答

0

sys.modules仍然保留对模块的引用。

>>> import six 
>>> del six 
>>> sys.modules["six"] 
<module 'six' from '/usr/lib64/python3.3/site-packages/six.py'> 

sys.modules仍然有一个引用。所以我不认为你可以在Python 3.3中卸载一个模块。

+2

您可以_can_ [卸载模块](https://stackoverflow.com/a/487718/2809027),但您甚至没有尝试过。因为'six'是一个顶级的纯Python模块,卸载'six'会减少到**(A)**'del sys.modules ['six']'和**(B)**'del six' (以任意顺序)。而已。删除对该模块的所有引用会导致该模块被垃圾收集。 –