我觉得this post应该帮助你
编辑: ,以确保这些信息的可用性(在情况下,链接死亡或者类似的东西),我将包括来自tutor mailing list原来这里的消息:
在06年8月14日,迪克·穆尔斯说:
其实,我的问题是,利用空闲做一些0123导入后模块和变量的初始化,如何返回到它的 初始条件而不关闭并重新打开它。
因此,例如后我做了
>>> import math, psyco
>>> a = 4**23
我怎样才能消灭那些出来而不关闭空闲? (我用了才知道怎么样,但是我忘了。)
嗨迪克,
通常这需要从“模块注册表中删除,并在代码中移除 引用它。如果你有一个真的很好用的模块(如 一个配置参数导入到每个模块),那么你将有一个 额外的步骤从每个模块中删除它。 “,那么你将无法释放该模块并参考模块e很容易(是从该模块获得,还是从 导入第三个模块?请参阅“如果偏执:下面的代码)
下面的函数从Python解释删除模块用名称 ‘偏执’参数变量名称的列表,以从每一个其他 模块除去(假定被与删除如果你的函数和类在不同的模块中被命名为相同的,这可能会给你的解释器带来问题,一个常见的问题是异常的“错误”,很多库中有一个 “catch-all”异常,称为“错误”。如果您还将 异常命名为“错误”,并决定将其包含在偏执性列表中,那么 会出现很多其他异常对象。
def delete_module(modname, paranoid=None):
from sys import modules
try:
thismod = modules[modname]
except KeyError:
raise ValueError(modname)
these_symbols = dir(thismod)
if paranoid:
try:
paranoid[:] # sequence support
except:
raise ValueError('must supply a finite list for paranoid')
else:
these_symbols = paranoid[:]
del modules[modname]
for mod in modules.values():
try:
delattr(mod, modname)
except AttributeError:
pass
if paranoid:
for symbol in these_symbols:
if symbol[:2] == '__': # ignore special symbols
continue
try:
delattr(mod, symbol)
except AttributeError:
pass
那么你应该能够使用此类似:
delete_module('psyco')
或
delete_module('psyco', ['Psycho', 'KillerError'])
# only delete these symbols from every other module
# (for "from psyco import Psycho, KillerError" statements)
-Arcege
还有_is_没有干净的方式来卸载模块。你要做的一切都是通过黑客。 – 2009-11-03 16:08:59
通过使用'ast'模块解析代码而不是导入它们来获取元数据,例如[Epydoc](http://epydoc.sf.net),[PyDoctor](http://codespeak.net/~mwh)/pydoctor /)和[Sphinx](http://sphinx.pocoo.org)。 – Allen 2011-04-01 21:45:21