1

首先,我必须告诉你,我已经看过这个错误 ,并且我知道该功能(通常)在很长一段时间内是不可能的。但是,我有一个非常具体的用例。因此,我将尝试描述我的用例,并征求建议。

我正在编写一个从解释器运行的交互式 python 应用程序。因此,用户在导入模块时可能会犯一两个错误,如果我可以为用户提供删除模块的方法(一旦他导入它),我希望它。

因此,对已经合并到其他对象中的模块的引用的问题之一就消失了。有一次,我确定模块根本没有被使用,我该怎么做才能删除它?它在技术上仍然可行吗?

我在想,如果我可以创建一个函数,在导入时手动删除模块创建的每个对象/函数,那么我想要的可能会实现。这是真的?

IPython 对其扩展进行了类似的操作。这是正确的方法吗?

4

1 回答 1

3

模块只是一个命名空间,一个对象,存储在sys.modules映射中。

如果没有其他对属于该模块的任何内容的引用,您可以将其从sys.modules映射中删除以再次删除它:

>>> import timeit
>>> import sys
>>> del timeit  # remove local reference to the timeit module
>>> del sys.modules['timeit']  # remove module
于 2013-02-03T12:18:20.847 回答