你如何在python版本3.3.2中重新加载模块

时间:2013-08-29 00:08:41

标签: python

每当我尝试在python版本3.3.2中重新加载python模块时,我都会收到此错误代码

>>> import bigmeesh
>>> bob=bigmeesh.testmod()
this baby is happy
>>> imp.reload(bigmeesh)
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    imp.reload(bigmeesh)
NameError: name 'imp' is not defined

我尝试过研究但仍然没有答案。

2 个答案:

答案 0 :(得分:14)

您必须import imp才能使用它,就像使用任何其他模块一样:

>>> import bigmeesh
>>> import imp
>>> imp.reload(bigmeesh)

请注意the documentation清楚地说:

  

注意:新程序应该使用importlib而不是此模块。

但是,在3.3中,importlib没有简单的reload函数;你必须自己从importlib.machinery建立它。因此,对于3.3,坚持使用imp。但是在3.4及更高版本中有importlib.reload,请改用它。


值得注意的是reload通常不是你想要的。例如,如果您希望bob更改为新版bigmeesh.testmod()的实例,则不会。但是,另一方面,如果您希望它根本不会发生变化,您可能会感到惊讶,因为它的一些行为可能取决于 更改的全局变量。

答案 1 :(得分:3)

这是重新加载模块的现代方法:

~/.zshrc

只需键入# Reload A Module def modulereload(modulename): import importlib importlib.reload(modulename) ,将modulereload(MODULE_NAME)替换为您要重新加载的模块的名称。

例如,MODULE_NAME将重新加载数学函数。