在 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.
最简单的解决方案是重新启动解释器。
我在两个文件中有以下玩具代码:
文件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.
最简单的解决方案是重新启动解释器。