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

In the Python REPL, how to get latest code from all file?

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

文件b.py:

def test_b():
    print "b"

文件a.py: 从 b 导入 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 的合适选项。

根据: https://docs.python.org/2/tutorial/modules.html 您可以使用 reload(a) (之前必须导入过一次)。看描述,这可能不是最好的解决方案。

引文:

Note

For efficiency reasons, each module is only imported once per interpreter session. Therefore, if you change your modules, you must restart the interpreter – or, if it’s just one module you want to test interactively, use reload(), e.g. reload(modulename).

及函数说明:https://docs.python.org/2/library/functions.html#reload 适度使用,因为:

If a module imports objects from another module using from ... import ..., calling reload() for the other module does not redefine the objects imported from it — one way around this is to re-execute the from statement, another is to use import and qualified names (module.name) instead.

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