笔记本格式非常适合版本控制:如果想要对笔记本和输出进行版本控制,那么这就很好地工作了。当你只想对输入进行版本控制,而不包括单元输出(也就是“构建产品”)时,麻烦就来了,这些单元输出可以是大的二进制blob,特别是对于电影和情节来说。特别是,我正在努力找到一个好的工作流程,它:
如前所述,如果我选择包含输出(例如,当使用nbviewer时,这是理想的),那么一切都很好。问题是当我不想对输出进行版本控制时。有一些工具和脚本用于剥离笔记本的输出,但我经常会遇到以下问题:
单元格/all output/clear
菜单选项相比,一些去除输出的脚本稍微改变了格式,从而在差异中产生了不需要的噪声。一些答案解决了这个问题。我已经考虑了我将在下文讨论的几个选项,但还没有找到一个好的全面解决方案。完整的解决方案可能需要对IPython进行一些更改,或者可能依赖于一些简单的外部脚本。我目前使用的是mercurial,但我想要一个同样适用于Git的解决方案:一个理想的解决方案是版本控制不可知的。
这个问题已经讨论过很多次了,但是从用户的角度来看,还没有一个确定的或者明确的解决方案。这个问题的答案应该提供确定的战略。如果它需要IPython的最新(甚至是开发)版本或易于安装的扩展,那也没问题。
下面是我使用Git的解决方案。它允许您像往常一样添加和提交(和diff):这些操作不会改变您的工作树,同时(重新)运行一个笔记本也不会改变您的git历史记录。
虽然这可能可以适应其他VCS,但我知道它不能满足您的要求(至少VSC的不可知论性)。不过,它对我来说是完美的,尽管它并没有什么特别出色的地方,而且很多人可能已经在使用它了,但我在谷歌搜索的时候并没有找到关于如何实现它的明确说明。所以它可能对其他人有用。
>
~/bin/ipynb_output_filter.py
)chmod+x~/bin/ipynb_output_filter.py
)创建文件~/.GITAttributes
,内容如下
*.ipynb filter=dropoutput_ipynb
git config --global core.attributesfile ~/.gitattributes
git config --global filter.dropoutput_ipynb.clean ~/bin/ipynb_output_filter.py
git config --global filter.dropoutput_ipynb.smudge cat
限制:
somebranch
中,并且您做了git checkout otherbranch;git checkout some branch
,通常希望工作树不变。在这里,您将丢失源在两个分支之间不同的笔记本的输出和单元格编号。git commit notebook_file.ipynb
,尽管它至少可以使git diff notebook_file.ipynb
免受base64垃圾的影响)来改变方法。我的解决方案反映了这样一个事实:我个人不喜欢将生成的东西保持版本化--注意,进行涉及输出的合并几乎保证会使输出或您的生产力无效,或者两者都无效。
编辑:
>
如果您确实采用了我建议的解决方案--也就是全局的--您将会遇到一些麻烦,以防您想要对输出进行版本化的git repo。因此,如果要禁用特定git存储库的输出过滤,只需在其中创建一个文件.git/info/attributes,使用
**.ipynb筛选器=
git config --global filter.dropoutput_ipynb.clean ipython ~/bin/ipynb_output_filter.py
什么是保持IPython笔记本版本控制的好策略? 笔记本格式非常适合进行版本控制:如果想要对笔记本和输出进行版本控制,那么这种方式非常有效。当人们只想对输入进行版本控制时,麻烦就来了,不包括单元输出(也称为“构建产品”),单元输出可以是大的二进制blob,尤其是电影和情节。特别是,我试图找到一个好的工作流程: 允许我在包括或排除输出之间进行选择, 防止我在不需要时意外提交输出, 允许我将输出保存在
我运行一个iPython笔记本服务器,希望用户能够下载一个作为csv文件的pandas dataframe,这样他们就可以在自己的环境中使用它。没有个人数据,所以如果解决方案包括在服务器上编写文件(我可以这样做),然后下载该文件,我很乐意这样做。
如何在IPython笔记本中显示LaTeX代码?
给定一个在外部服务器上运行的iPython笔记本,是否有方法触发文件下载? 我希望笔记本能够将外部服务器上的文件下载到本地呈现笔记本的位置,或者从笔记本工作区执行直接字符串转储到文本文件中,本地下载。 一、 E.一个强大的工具是一个笔记本,它可以从数据库中查询、更改数据,并将查询结果下载为CSV文件。 一个快速的实验表明,包含以下内容的单元格会呈现一个下载文件的链接。我希望有一个比将数据呈现到ht
Unix was not designed to stop you from doing stupid things, because that would also stop you from doing clever things. — Doug Gwyn 你曾经遇到过误删除了某些文件而又希望恢复的情形吧? 本书中提及的最重要的技巧就是将 Puppet 的 配置清单(manifests)纳入像
问题内容: 我正在使用内联模式下的IPython Notebook和plot命令绘制一个NumPy值数组。 结果输出为: 然后,我的图显示在这些输出线的下方。 有没有办法只显示图并从输出中隐藏? 问题答案: 您可以使用分号结束行。这样可以在生成图时抑制不必要的输出: 通常,使用分号可以阻止IPython从代码块的该行打印任何输出值。例如,执行包含代码的单元将不会输出。 另一种方法是将变量绑定到图: