8

每当我尝试在 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

我试图研究,但仍然没有得到答案。

4

2 回答 2

21

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

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

请注意,文档清楚地说明:

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

但是,在 3.3 中,importlib没有简单的reload功能;你必须自己构建它importlib.machinery。所以,对于 3.3,坚持使用imp. 但在 3.4 及更高版本中确实有importlib.reload,请改用它。


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

于 2013-08-29T00:10:08.083 回答
7

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

# Reload A Module
def modulereload(modulename):
    import importlib
    importlib.reload(modulename)

只需键入modulereload(MODULE_NAME),替换MODULE_NAME为您要重新加载的模块的名称。

例如,modulereload(math)将重新加载数学函数。

于 2017-11-29T08:12:28.660 回答