更改后重新加载模块

时间:2014-09-20 12:55:21

标签: python python-2.7

我知道可以通过发出以下命令重新加载模块:

reload(module_name)

假设我不导入整个模块,而只导入它的一个功能。

from module_name import one_function 

如何在对其进行更改后重新加载该特定功能。

提前致谢。

2 个答案:

答案 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>

请注意,这不能保证有效;并非所有属性都很容易找到。