我在两个文件中有以下玩具代码:
档案b.py
:
def test_b():
print "b"
档案a.py
:
来自b import test_b
def test_a():
print "a"
test_b()
然后我运行python REPL:
>>> execfile("a.py")
>>> test_a()
a
b
然后我将b.py
修改为:
def test_b():
打印" bb"
在REPL中运行:
>>> execfile("b.py")
>>> test_a()
a
bb
现在一切都很好。现在我将a.py
修改为:
from b import test_b
def test_a():
print "aa"
test_b()
现在我遇到了REPL:
>>> execfile("a.py")
>>> test_a()
aa
b
由于REPL获得了b.py
的旧版本,因此不再适用。 Python在加载文件时似乎正在做一些缓存,我的问题是:有没有办法强迫它不要这样做?我无法为函数excefile
找到合适的选项。
答案 0 :(得分:1)
根据: https://docs.python.org/2/tutorial/modules.html 你可以使用reload(a)(它必须先导入一次)。请参阅说明,它可能不是最佳解决方案。
引文:
请注意
出于效率原因,每个解释器会话只导入一个模块。因此,如果更改模块,则必须重新启动解释器 - 或者,如果它只是一个要交互式测试的模块,请使用reload(),例如,重新加载(模块名)。
以及函数说明:https://docs.python.org/2/library/functions.html#reload 从以下情况开始使用:
如果模块使用from ... import ...从另一个模块导入对象,则为其他模块调用reload()不会重新定义从其导入的对象 - 一种方法是重新执行from语句,另一种方法是使用导入和限定名称(模块。名称)。
最简单的解决方案是重新启动解释器。