在IPython中重新加载子模块

独自空忆成欢 提交于 2020-03-10 16:35:53

目前,我正在处理一个包含子模块并使用numpy / scipy的python项目。 Ipython用作交互式控制台。 不幸的是,我对现在使用的工作流程不是很满意,请多多指教。

在IPython中,框架是通过简单的import命令加载的。 但是,通常有必要在框架的子模块之一中更改代码。 至此,已经加载了一个模型,并且我使用IPython与之交互。

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


#1楼

由于某些原因,当您将代码从一个笔记本导入到另一个笔记本时, %autoreloaddreload似乎都不适合这种情况。 仅纯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")
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!