目前,我正在处理一个包含子模块并使用numpy /
scipy的python项目。Ipython用作交互式控制台。不幸的是,我对现在使用的工作流程不是很满意,请多多指教。
在IPython中,该框架是通过一个简单的import
命令加载的。但是,通常有必要在框架的子模块之一中更改代码。至此,一个模型已经加载完毕,我使用IPython与之交互。
现在,该框架包含许多相互依赖的模块,即,在最初加载框架时,主模块正在导入和配置子模块。仅当使用重新加载模块时,才执行对代码的更改reload(main_mod.sub_mod)
。这很麻烦,因为我需要使用完整路径分别重新加载所有更改的模块。如果reload(main_module)
还重新加载所有子模块,但又不重新加载numpy
/ scipy ,将非常方便。
IPython带有一些自动重装魔术:
%load_ext autoreload
%autoreload 2
每次执行新行之前,它将重新加载所有更改的模块。它的工作方式与稍有不同dreload
。有一些警告,请键入%autoreload?
以查看可能出问题的地方。
如果要始终启用此设置,请修改IPython配置文件~/.ipython/profile_default/ipython_config.py
[1]并附加:
c.InteractiveShellApp.extensions = ['autoreload']
c.InteractiveShellApp.exec_lines = ['%autoreload 2']
通过下面的评论归功于@Kos。
[1]如果没有该文件~/.ipython/profile_default/ipython_config.py
,则需要先调用ipython profile create
。或者该文件可能位于$IPYTHONDIR
。
问题内容: 有没有办法让IPython自动重新加载所有更改的代码?在外壳中执行每行之前,或者在明确要求时失败。我正在使用IPython和SciPy进行很多探索性编程,每当更改模块时都必须手动重新加载每个模块,这是很痛苦的。 问题答案: 对于IPython版本3.1、4.x和5.x 然后,您的模块将默认 自动重新加载 。这是文档: 有一个窍门:当您使用时 忘记 以上 所有 内容时,请尝试:
问题 你想重新加载已经加载的模块,因为你对其源码进行了修改。 解决方案 使用imp.reload()来重新加载先前加载的模块。举个例子: >>> import spam >>> import imp >>> imp.reload(spam) <module 'spam' from './spam.py'> >>> 讨论 重新加载模块在开发和调试过程中常常很有用。但在生产环境中的代码使用会不安全,因
问题内容: 我正在尝试从启动时自动加载模块,目前我在IPython启动库中有一个简单的脚本,其内容如下: 直接从外壳运行时可以正常工作,但是从脚本运行该行时,该模块似乎没有加载,我通过向其添加一些任意变量分配来确保已加载启动脚本: 并在启动IPython时(如预期的那样)预先分配了变量。 我试图在这里和这里寻找一些解决方案,但无处可寻,任何帮助将不胜感激,谢谢 问题答案: 我找到了一个解决方案,在
问题内容: 我有一台运行时间较长的Python服务器,并且希望能够在不重新启动服务器的情况下升级服务。最好的方法是什么? 问题答案: 你可以使用reload内置函数重新加载已导入的模块: 在Python 3中,已移至imp模块。在3.4中,不推荐使用importlib,而在中添加了。当定位到3或更高版本时,在调用reload或导入时参考相应的模块。 我认为这就是你想要的。诸如Django开发服务器
问题内容: 我有一个运行时间较长的Python服务器,并且希望能够在不重新启动服务器的情况下升级服务。最好的方法是什么? 问题答案: 您可以使用reload内置函数(仅适用于Python 3.4+)重新导入已导入的模块: 在Python 3中,已移至模块。在3.4中,imp不推荐使用,而reload在中添加了。当定位到3或更高版本时,在调用reload或导入时参考相应的模块。 我认为这就是您想要的
问题内容: 跟进有关重新加载模块的问题,如何从已更改的模块重新加载特定功能? 伪代码: 问题答案: 您想要的是可能的,但是需要重新加载两件事……首先,但是您还必须这样做(假设是包含该语句的模块的名称)。 至于为什么…第一次加载时,将创建一个对象,其中包含一个对象。当您导入到模块,它存储到一个参考。当被调用时,对象被消隐,并且该模块重新执行。这意味着所有引用仍然有效,但是已经创建了一个新对象…因此,