目前,我正在处理一个包含子模块并使用numpy / scipy的python项目。 Ipython用作交互式控制台。 不幸的是,我对现在使用的工作流程不是很满意,请多多指教。
在IPython中,框架是通过简单的import
命令加载的。 但是,通常有必要在框架的子模块之一中更改代码。 至此,已经加载了一个模型,并且我使用IPython与之交互。
现在,该框架包含许多相互依赖的模块,即,在最初加载框架时,主模块正在导入和配置子模块。 仅当使用reload(main_mod.sub_mod)
重新reload(main_mod.sub_mod)
模块时,才执行对代码的更改。 这很麻烦,因为我需要使用完整路径分别重新加载所有更改的模块。 如果reload(main_module)
也重新加载所有子模块,但不重新加载numpy / scipy,那将是非常方便的。
#1楼
由于某些原因,当您将代码从一个笔记本导入到另一个笔记本时, %autoreload
和dreload
似乎都不适合这种情况。 仅纯Python reload
有效:
reload(module)
基于[1] 。
#2楼
另外一个选项:
$ cat << EOF > ~/.ipython/profile_default/startup/50-autoreload.ipy
%load_ext autoreload
%autoreload 2
EOF
在Ubuntu 14.04上的ipython和ipython3 v5.1.0上进行了验证。
#3楼
我的重载标准做法是在首次打开IPython
之后结合这两种方法:
from IPython.lib.deepreload import reload
%load_ext autoreload
%autoreload 2
在执行此操作之前先加载模块,即使使用手动reload(module_name)
,也不会重新加载模块。 我仍然很少遇到类方法无法重装的莫名其妙的问题,而我尚未研究过。
#4楼
在Anaconda的Jupyter笔记本上,执行以下操作:
%load_ext autoreload
%autoreload 2
产生了消息:
autoreload扩展程序已加载。 要重新加载它,请使用:
%reload_ext autoreload
看起来最好这样做:
%reload_ext autoreload
%autoreload 2
版本信息:
笔记本服务器的版本为5.0.0,并且在以下版本上运行:Python 3.6.2 | Anaconda,Inc. | (默认值,2017年9月20日,13:35:58)[MSC v.1900 32位(Intel)]
#5楼
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")
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3191049