importlib.reload 来自字符串的模块?

importlib.reload module from string?

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

示例:

import sys

def some_func():
    return "sys"

want_reload = some_func()

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

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

importlib.import_module() 不会重新加载,但是 returns 对模块的引用,即使已经加载也是如此:

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)

根据@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))