我知道可以通过发出以下命令重新加载模块:
reload(module_name)
假设我不导入整个模块,而只导入它的一个功能。
from module_name import one_function
如何在对其进行更改后重新加载该特定功能。
提前致谢。
答案 0 :(得分:2)
您必须重新导入一个名称才能重新绑定它;您可以在sys.modules
中找到缓存的模块对象:
reload(sys.modules['module_name'])
from module_name import one_function
答案 1 :(得分:1)
您可以使用inspect.getmodule
获取拥有某个功能的模块:
import inspect
from math import sqrt
from importlib import reload
math = reload(inspect.getmodule(sqrt))
sqrt = math.sqrt
使用__qualname__
可以自动完成此过程:
def reload_attr(attribute):
obj = reload(inspect.getmodule(attribute))
for name in attribute.__qualname__.split("."):
try:
obj = getattr(obj, name)
except NameError:
raise ValueError("Unable to find attribute.")
return obj
reload_attr(sqrt)
#>>> <built-in function sqrt>
请注意,这不能保证有效;并非所有属性都很容易找到。