我正在尝试重新加载我已经在Python 3中导入的模块。我知道您只需要导入一次并再次执行import
命令将不会执行任何操作。
执行reload(foo)
会出现此错误:
Traceback (most recent call last):
File "(stdin)", line 1, in (module)
...
NameError: name 'reload' is not defined
错误是什么意思?
答案 0 :(得分:214)
reload
是Python 2中的内置函数,但在Python 3中没有,因此预期会出现错误。
如果你真的必须在Python 3中重新加载模块,你应该使用:
importlib.reload
适用于Python 3.4及以上版本imp.reload
适用于Python 3.0到3.3(自Python 3.4以来不赞成使用importlib
)答案 1 :(得分:72)
对于> = Python3.4:
import importlib
importlib.reload(module)
For< = Python3.3:
import imp
imp.reload(module)
对于Python2.x:
使用内置的reload()
功能。
reload(module)
答案 2 :(得分:48)
import imp
imp.reload(script4)
答案 3 :(得分:33)
要扩展以前编写的答案,如果您想要一个适用于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
答案 4 :(得分:11)
我建议使用以下代码片段,因为它适用于所有python版本(需要six
):
from six.moves import reload_module
reload_module(module)
答案 5 :(得分:1)
要获得python2和python3的兼容性,可以使用:
# Python 2 and 3
from imp import reload
reload(mymodule)
答案 6 :(得分:1)
如果您不想使用外部库,则一种解决方案是从python 2重新为python 3创建reload方法,如下所示。在模块顶部(假设python 3.4+)中使用它。
numpy
如果您将python文件用作配置文件,并希望避免重新启动应用程序,则非常需要重新加载BTW。
答案 7 :(得分:-15)
您删除了__builtins__变量。
如何解决这个问题?不要删除__builtins __。
也可以有人逐步解释该错误信息的含义吗?
这意味着python无法找到“重新加载”功能。
重新加载(script4.py)
这是不正确的。如果您执行了“import script4”,则必须执行“reload(script4)”