在Python REPL中,如何从所有文件中获取最新代码?

时间:2015-10-30 15:16:12

标签: python read-eval-print-loop

我在两个文件中有以下玩具代码:

档案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找到合适的选项。

1 个答案:

答案 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语句,另一种方法是使用导入和限定名称(模块。名称)。

最简单的解决方案是重新启动解释器。