从字符串importlib.reload模块?

时间:2018-09-02 06:18:29

标签: python-3.x python-importlib

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

示例:

import sys

def some_func():
    return "sys"

want_reload = some_func()

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

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

2 个答案:

答案 0 :(得分:4)

import React, {Component} from 'react'; class Input extends Component { state = { firstName: '' } displayNameHandler = (e) => { let updatedName = e.target.value; this.setState({firstName: updatedName}); //console.log(updatedName); } render() { return( <div> <form> <label>Enter the Name</label> <input type="text" name="firstName" onChange={this.displayNameHandler}/> <button type="button" onSubmit={e => this.displayNameHandler(e)}>Submit</button> <p>"FirstName: " {this.state.firstName}</p> </form> </div> ); } } export default Input; 不会重新加载,但是即使已加载,也会向模块返回一个引用:

importlib.import_module()

答案 1 :(得分:1)

在@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))