gpt4 book ai didi

python - ipython:使用 %run 时重新导入模块

转载 作者:IT老高 更新时间:2023-10-28 21:03:35 25 4
gpt4 key购买 nike

我喜欢 ipython,但我发现了 %run 的一个问题:重复调用 %run 时导入的模块不会重新加载。

假设文件 ex1.py 包含以下行:

import ex2
ex2.x.append(1)
print ex2.x

并且文件 ex2.py 包含:

x = []

现在,从命令行运行 python ex1.py 每次都会重复打印 [1]。但是从 ipython 中调用 %run ex1.py 会重复打印 [1]、[1,1]、[1,1,1] 等。这是因为模块 ex2.py 没有重新加载。所以我们有一个问题:ipython run-script 协议(protocol)没有反射(reflect)“现实世界”的行为。

注意:

%load_ext autoreload
%autoreload 2

没有有帮助吗。仅当对 ex2.py 文件进行了更改时,这些行才会重新加载 ex2.py。如果我们不做任何更改,或者只对 ex1.py 进行更改,我们会得到不希望的行为。

有什么方法可以让 %run 的行为像这里的命令行一样?这似乎是使用 ipython 作为脚本测试环境的真正缺陷。 (或者也许道德是一个模块不应该写入另一个模块的命名空间?)

最佳答案

%run ex1.py(或与此相关的任何脚本)即使将 autoreload 扩展设置为 2,也不会对导入的模块进行深度重新加载。这是一个“缺陷” %run 命令在 ipython 中有效。

你必须明确地调用

dreload(ex2)

在再次执行 %run ex1.py 之前进行深度重新加载。

见 - http://ipython.org/ipython-doc/dev/api/generated/IPython.lib.deepreload.html

future 可能有计划让 %run 自动进行深度重新加载,您可以找到这个问题,在撰写本文时,这仍然是一个悬而未决的问题,这里的用户建议 - https://github.com/ipython/ipython/issues/461

关于python - ipython:使用 %run 时重新导入模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13150259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com