如何使用nbconvert作为git textconv驱动程序来启用Jupyter Notebooks的有效版本控制

时间:2018-07-14 15:22:43

标签: python git jupyter-notebook diff

我正在尝试做的事情以及与类似问题的区别

我想使用Git对Jupyter Notebooks进行版本控制。不幸的是,默认情况下,Git和Jupyter笔记本无法很好地播放。 .ipynb文件是.json文件,不仅包含Python代码本身,还包含大量元数据(例如,单元执行计数)和单元输出。

大多数现有解决方案(例如Using IPython notebooks under version control)都依赖于从笔记本中删除输出和元数据。 (i)进行差异化时,它仍然保持.json文件的结构,这很难读,并且(ii)意味着不能使用诸如Github上的输出显示之类的功能,因为在提交之前会删除输出。 / p>

我的想法如下:每当我运行git diff时,Git都会自动使用jupyter nbconvert --to python filename.ipynb从我的*.ipynb源文件转换为*.py纯Python文件。然后,它应该仅检测到影响代码本身的更改(而不是执行计数和输出,因为它们被nbconvert删除了)而没有实际删除它们,并且应该使我的差异比未转换的{{1 }}文件。我不希望文件的.ipynb版本被永久存储;它仅应用于.py。我的理解是,只需将git diff指定为nbconvert驱动程序,就可以做到这一点,但是我无法使其正常工作。

到目前为止我已经执行的步骤

我在包含以下内容的[diff] textconv中创建了一个名为ipynb2py的文件

/usr/local/bin

我已将以下内容添加到我的#!/bin/bash jupyter nbconvert --to python $1 文件中

.gitconfig

然后将以下内容添加到我的[diff "ipynb"] textconv = ipynb2py 文件中

.gitattributes

*.ipynb diff=ipynb textconv驱动程序分配给所有ipynb格式的文件。

现在,我希望.ipynb会在每次运行它时自动执行一次转换(我知道这会大大减慢速度,但是值得为VCing笔记本提供一个可行的选择),然后显示一个不错的可读差异,仅基于转换后笔记本状态 的差异。

当我执行git diff时,它首先说git diff,这告诉我Git正在按预期触发转换。但是,在经过[NbConvertApp] Converting notebook结尾的长时间Python追溯之后,转换失败。

在出现fatal: unable to read files to diff错误消息之前,我收到以下消息

fatal

当然,我怀疑nbformat.reader.NotJSONError: Notebook does not appear to be JSON: '\n# coding: utf-8\n\n# In[ ]:\n\nimport... 脚本调用ipynb2py的方式存在问题,但是在我的仓库中运行nbconvert的效果很好,所以不能是原因。

什么可能导致此错误?除了返回文本文件之外,有效的ipynb2py notebook.ipynb驱动程序有什么要求?

完全追溯

textconv

2 个答案:

答案 0 :(得分:2)

如果您仔细阅读documentation of gitattributes(描述了textconv配置选项的地方),您会注意到转换器程序必须将输出发送到标准输出:

  

...

     

执行二进制文件的文本差异

     

有时候,希望能看到文本转换版本的差异   一些二进制文件。例如,文字处理器文档可以是   转换为ASCII文本表示形式,以及文本的差异   如图所示。即使这种转换会丢失一些信息,   产生的差异对于人类观看很有用(但无法应用   直接)。

     

textconv config选项用于为以下程序定义程序   执行这样的转换。该程序应该采取一个   参数,要转换的文件名,然后 生成结果   在标准输出上输入文字。

     

...

因此,您必须在转换命令中添加--stdout选项:

ipynb2py

#!/bin/bash
jupyter nbconvert --to python --stdout "$1"

答案 1 :(得分:0)

您是否尝试过直接提交笔记本。在查看版本控制jupyter笔记本时,我看到了与您类似的帖子,但是当我尝试使用它时,它似乎工作正常。

github上的示例笔记本

https://github.com/loegare/Test-Post-Please-Ignore/blob/master/Untitled%20Folder/Data%20Due%20Dilligence.ipynb