如何重新加载 Python 模块?清除变量信息
How to Reload a Python Module? Clearing Variable Info
我一直在内置模块中存储变量信息,我想清除存储在其中的所有变量信息。不过我不知道该怎么做。
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))
这似乎不起作用。
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)
如果 clear
和 update
之间出现另一个线程,那将不会是线程安全的,但是尝试重新加载 builtins
无论如何都不是安全的。
我一直在内置模块中存储变量信息,我想清除存储在其中的所有变量信息。不过我不知道该怎么做。
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))
这似乎不起作用。
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)
如果 clear
和 update
之间出现另一个线程,那将不会是线程安全的,但是尝试重新加载 builtins
无论如何都不是安全的。