6

我想用来importlib重新加载一个名称是动态生成的模块。

例子:

import sys

def some_func():
    return "sys"

want_reload = some_func()

现在如何sys使用变量重新加载模块want_reload?我不能直接提供它,importlib.reload()因为它说它需要一个模块,而不是 str。

如果提供无效字符串或未加载的模块会更好,例如"........",它会引发异常。

4

2 回答 2

7

importlib.import_module()不会重新加载,但即使已经加载,也会向模块返回一个 ref:

import sys
import importlib

def some_func():
    return "sys"

want_reload = some_func()
want_reload_module = importlib.import_module(want_reload)
importlib.reload(want_reload_module)
于 2018-09-02T06:55:32.040 回答
4

@spinkus 的回答暗示,我想出了这个解决方案:

由于我不想加载尚未加载的模块,因此我可以从sys.modules

want_reload = some_func()
try:
    want_reload_module = sys.modules[want_reload]
    importlib.reload(want_reload_module)
except KeyError:
    raise ImportError("Module {} not loaded. Can't reload".format(want_reload))
于 2018-09-02T07:08:46.627 回答