此问题类似于[Python: reload component Y imported with 'from X import Y'?]。但是,显然重新加载在python 3中不起作用。
我最初有
from vb2GP import vb_Estep
然而,由于我修改了vb_Estep的错误。当我尝试使用importlib.reload(vb_Estep)
重新加载时,我收到错误:
File "<ipython-input-61-72416bca3a93>", line 1, in <module>
importlib.reload(vb_Estep)
File "/Users/sachin/anaconda/lib/python3.5/importlib/__init__.py", line 139, in reload
raise TypeError("reload() argument must be module")
TypeError: reload() argument must be module
我甚至尝试importlib(vb2GP.vb_Estep)
我得到错误NameError: name 'vb2GP' is not defined
,这是有道理的,因为我从未导入vb2GP开始。
所以问题是,你如何使用importlib
在Python3中重新加载组件。
答案 0 :(得分:2)
您使用的reload
函数仅适用于模块,而不能直接处理从它们导入的对象。要使用它,您需要先导入vb2GP
,然后在模块对象上调用reload
,然后从新版本的模块中提取重新加载的vb_Estep
值。 / p>
import importlib
import vb2GP # import the old version of the module
vb2GP = importlib.reload(vb2GP) # reload it
vb_Estep = vb2GP.vb_Estep # get a reference to the value in the reloaded module
但这可能实际上并不是必要的,这取决于你如何修改&#34;当前vb_Estep
值。如果您只将名称重新绑定为新值,则可以重新导入旧名称而不进行任何reload
(只需再次使用from vb2GP import vb_Estep
)。只有当您修改了适当的值(例如,通过更改其内容或属性而不重新绑定变量名称本身)时,才需要上面的reload
代码。