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))
我想使用 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))