我正在尝试重新加载我已经在 Python 3 中导入的模块。我知道您只需要导入一次并且import
再次执行该命令不会做任何事情。
执行reload(foo)
给出了这个错误:
Traceback (most recent call last):
File "(stdin)", line 1, in (module)
...
NameError: name 'reload' is not defined
错误是什么意思?
我正在尝试重新加载我已经在 Python 3 中导入的模块。我知道您只需要导入一次并且import
再次执行该命令不会做任何事情。
执行reload(foo)
给出了这个错误:
Traceback (most recent call last):
File "(stdin)", line 1, in (module)
...
NameError: name 'reload' is not defined
错误是什么意思?
reload
是 Python 2 中的内置函数,但不是 Python 3 中的内置函数,因此您看到的错误是预期的。
如果你真的必须在 Python 3 中重新加载一个模块,你应该使用:
importlib.reload
适用于 Python 3.4 及更高版本imp.reload
适用于 Python 3.0 到 3.3(自 Python 3.4 起已弃用,支持importlib
)对于 >= Python3.4:
import importlib
importlib.reload(module)
对于 <= Python3.3:
import imp
imp.reload(module)
对于 Python2.x:
使用内置reload()
功能。
reload(module)
import imp
imp.reload(script4)
要扩展先前编写的答案,如果您想要一个可以跨 Python 版本 2 和 3 工作的单一解决方案,您可以使用以下内容:
try:
reload # Python 2.7
except NameError:
try:
from importlib import reload # Python 3.4+
except ImportError:
from imp import reload # Python 3.0 - 3.3
我建议使用以下代码段,因为它适用于所有 python 版本(需要six
):
from six.moves import reload_module
reload_module(module)
如果您不想使用外部库,那么一种解决方案是从 python 2 为 python 3 重新创建 reload 方法,如下所示。在模块顶部使用它(假设 python 3.4+)。
import sys
if(sys.version_info.major>=3):
def reload(MODULE):
import importlib
importlib.reload(MODULE)
如果您使用 python 文件作为配置文件并希望避免重新启动应用程序,那么 BTW 重新加载是非常必要的.....
对于 python2 和 python3 的兼容性,您可以使用:
# Python 2 and 3
from imp import reload
reload(mymodule)