目前,我正在研究一个包含子模块的python项目,并使用numpy/scipy。使用Ipython作为交互控制台。不幸的是,我对我现在使用的工作流程不是很满意,我很感激一些建议。

在IPython中,框架是通过一个简单的导入命令加载的。但是,经常需要更改框架的一个子模块中的代码。此时,已经加载了一个模型,我使用IPython与它交互。

现在,框架包含许多相互依赖的模块,也就是说,当框架最初加载时,主模块正在导入和配置子模块。只有使用reload(main_mod.sub_mod)重新加载模块时,才会执行对代码的更改。这很麻烦,因为我需要使用完整的路径单独重新加载所有更改的模块。如果reload(main_module)也会重载所有子模块,但不重载numpy/scipy..


当前回答

注意,上面提到的自动重载只适用于IntelliJ如果你手动保存更改的文件(例如使用ctrl+s或cmd+s)。它好像不能自动保存。

其他回答

另一个选择:

$ cat << EOF > ~/.ipython/profile_default/startup/50-autoreload.ipy
%load_ext autoreload
%autoreload 2
EOF

已在Ubuntu 14.04的ipython和ipython3 v5.1.0上验证。

出于某种原因,当您将代码从一个笔记本导入到另一个笔记本时,自动加载和重新加载似乎都不起作用。只有普通的Python重载有效:

reload(module)

基于[1]。

在IPython 0.12(可能更早)中,你可以使用这个:

%load_ext autoreload
%autoreload 2

这本质上和除以pv的结果是一样的。,除了扩展名已经重命名并且现在使用%load_ext加载。

http://shawnleezx.github.io/blog/2015/08/03/some-notes-on-ipython-startup-script/

为了避免一次又一次地输入这些神奇的函数,它们可以放在ipython启动脚本中(在.ipython/profile_default/startup下以.py后缀命名)。该文件夹下的所有python脚本将按照词法顺序加载),如下所示:

from IPython import get_ipython
ipython = get_ipython()

ipython.magic("pylab")
ipython.magic("load_ext autoreload")
ipython.magic("autoreload 2")

注意,上面提到的自动重载只适用于IntelliJ如果你手动保存更改的文件(例如使用ctrl+s或cmd+s)。它好像不能自动保存。