我试图重新加载一个已经在 Python3中导入的模块。我知道您只需要导入一次,再次执行 import命令将无济于事。
import
执行 reload(foo)会出现这样的错误:
reload(foo)
Traceback (most recent call last): File "(stdin)", line 1, in (module) ... NameError: name 'reload' is not defined
这个错误是什么意思?
reload 是 Python 2内置的,但不是 Python 3内置的,所以您看到的错误是预料之中的。
reload
如果您真的必须在 Python3中重新加载模块,那么您应该使用以下两种方式:
importlib.reload
imp.reload
importlib
import imp imp.reload(script4)
对于 > = Python 3.4:
import importlib importlib.reload(module)
因为 < = Python 3.3:
import imp imp.reload(module)
对于 Python 2.x:
使用内置的 reload()函数。
reload()
reload(module)
为了扩展以前写的答案,如果你想要一个单一的解决方案,将工作在 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) :
six
from six.moves import reload_module reload_module(module)
对于 python2和 python3兼容性,可以使用:
# Python 2 and 3 from imp import reload reload(mymodule)
如果您不想使用外部库,那么一个解决方案是从 python2为 python3重新创建 reload 方法,如下所示。在模块的顶部使用它(假设是 python 3.4 +)。
import sys if(sys.version_info.major>=3): def reload(MODULE): import importlib importlib.reload(MODULE)
如果您使用 python 文件作为配置文件,并且希望避免重新启动应用程序,那么 BTW 重新加载是非常必要的... ..。