我覺得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