为了账号安全,请及时绑定邮箱和手机立即绑定

在版本控制下使用IPython笔记本

在版本控制下使用IPython笔记本

慕神8447489 2019-09-06 17:19:44
将IPython笔记本电脑置于版本控制之下的好策略是什么?笔记本格式非常适合版本控制:如果想要版本控制笔记本和输出,那么这非常有效。当人们只想对输入进行版本控制时,就会产生烦恼,不包括可能是大型二进制blob的单元格输出(也就是“构建产品”),特别是对于电影和情节。特别是,我试图找到一个良好的工作流程:允许我选择包括或排除输出,如果我不想要它会阻止我意外地提交输出,允许我保持我的本地版本的输出,允许我看看当我使用我的版本控制系统更改输入时(即如果我只对版本控制输入但我的本地文件有输出,那么我希望能够看到输入是否已更改(需要提交) )。使用版本控制状态命令将始终注册差异,因为本地文件有输出。)允许我从更新的干净笔记本更新我的工作笔记本(包含输出)。(更新)如上所述,如果我选择包含输出(例如,在使用nbviewer时这是可取的),那么一切都很好。问题是,当我不想要的版本控制输出。有一些工具和脚本可以剥离笔记本的输出,但我经常会遇到以下问题:我不小心提交了一个带有输出的版本,从而污染了我的存储库。我清除输出以使用版本控制,但实际上宁愿将输出保留在我的本地副本中(例如,有时需要一段时间来重现)。与Cell/All Output/Clear菜单选项相比,剥离输出的一些脚本会稍微改变格式,从而在差异中产生不必要的噪声。这可以通过一些答案来解决。当将更改提取到文件的干净版本时,我需要找到一些方法将这些更改合并到我的工作笔记本中而无需重新运行所有内容。 (更新)我已经考虑过几个选项,我将在下面讨论,但还没有找到一个很好的综合解决方案。完整的解决方案可能需要对IPython进行一些更改,或者可能依赖于一些简单的外部脚本。我目前使用mercurial,但想要一个也适用于git的解决方案:理想的解决方案是版本控制不可知。这个问题已经多次讨论过,但从用户的角度来看,没有明确或明确的解决方案。这个问题的答案应该提供明确的策略。如果它需要最近的(甚至开发)版本的IPython或一个易于安装的扩展,这很好。更新:我一直在玩我修改过的笔记本版本,可以选择.clean使用Gregory Crosswhite的建议保存每次保存的版本。这满足了我的大多数约束,但是仍然没有解决以下问题:这还不是一个标准的解决方案(需要修改ipython源。有没有办法通过简单的扩展来实现这种行为?需要某种on-save钩子。我对当前工作流程的一个问题是拉动变化。这些将进入.clean文件,然后需要以某种方式集成到我的工作版本中。(当然,我总是可以重新执行笔记本,但这可能很痛苦,特别是如果某些结果取决于长时间的计算,并行计算等)。我还不知道如何解决这个问题。也许涉及像ipycache这样的扩展的工作流可能会起作用,但这似乎有点过于复杂。笔记删除(剥离)输出笔记本电脑运行时,可以使用Cell/All Output/Clear菜单选项删除输出。有一些用于删除输出的脚本,例如删除输出的脚本nbstripout.py,但不会产生与使用笔记本界面相同的输出。这最终包含在ipython / nbconvert repo中,但是已经关闭,说明这些更改现在包含在ipython / ipython中,但相应的功能似乎还没有包含在内。 (更新)话虽如此,Gregory Crosswhite的解决方案显示这很容易做到,即使没有调用ipython / nbconvert因此,如果可以正确地连接它,这种方法可能是可行的。(然而,将它附加到每个版本控制系统似乎不是一个好主意 - 这应该以某种方式挂钩到笔记本机制。)
查看完整描述

3 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

我创建了nbstripout基于MinRKs的gist,它支持Git和Mercurial(感谢mforbes)。它既可以在命令行上单独使用,也可以作为过滤器使用,可以通过nbstripout install/ 轻松(非)安装在当前存储库中nbstripout uninstall。


从PyPI或简单地获取它


pip install nbstripout


查看完整回答
反对 回复 2019-09-06
  • 3 回答
  • 0 关注
  • 452 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信