如何重新加载Python模块?清除可变信息

时间:2016-03-01 03:57:28

标签: python python-module

我一直在内置模块中存储变量信息,我想清除存储在其中的所有变量信息。我无法弄清楚如何做到这一点。

import importlib
import builtins
print("add" in dir(builtins))
builtins.add = "x"
print("add" in dir(builtins))
importlib.reload(builtins)
print("add" in dir(builtins))

这似乎不起作用。

1 个答案:

答案 0 :(得分:1)

reload在重新加载模块之前不会清除模块的__dict__,因此重新加载模块不会影响您添加到模块中的任何名称,而这些名称最初不是模块的一部分。

最好避免弄乱builtins模块,而不是在弄乱它之后尝试恢复它。也就是说,如果您真的想要这样做,请先保存builtins.__dict__的副本,然后再将其搞砸,以便以后可以从备份中恢复:

# Before screwing with builtins:
builtins_backup = builtins.__dict__.copy()

# After screwing with builtins:
builtins.__dict__.clear()
builtins.__dict__.update(builtins_backup)

如果clearupdate之间有另一个线程,那就不会线程安全,但无论如何,尝试重新加载builtins几乎都不在安全的范围内。