我在Visual Studio Code
(v1.73.1)中使用Jupyter
扩展(v2022.9.1303220346)。
要重现这个问题,请对笔记本做任何修改,然后将其签入git。你会发现execution_count
有额外的不同。例如(display from Git Gui
):
- "execution_count": 7,
+ "execution_count": 9,
执行计数看起来没有什么用,在git历史记录中是一个噪音。Jupyter或VS Code是否可以配置为停止更新这个值,或者干脆忽略它?
2条答案
按热度按时间twh00eeo1#
Jupyter或VS Code是否可以配置为停止更新这个值或者(更好的)完全忽略它?
我对VS Code不太确定,在阅读了GitHub中针对Jupyter笔记本的功能请求问题通知单后,我认为VS Code配置选项的答案可能是否定的。事实上,它们是功能请求,这也向我表明,答案 * 目前 * 似乎也是否定的,但也有很多方法来解决这个问题:
jupyter/notebook
中:Suggestion: Separate file for notebook executed cell outputs. #5677我认为最好有一个单独的文件(类似于. ipynb.output),将输出链接到. ipynb json文件中的单元格,这将大大简化在git等源代码控制系统中排除笔记本输出的工作。-jbursey
这不是一个坏主意。但是如果您主要关心的是将单元格输出排除在源代码管理之外,最简单的解决方案是在提交之前清除输出。有几种方法可以做到这一点:
使用commit hook as outlined in Jupyter docs。
有些人也选择只使用nbconvert将笔记本转换为python,然后提交。如果你搜索"如何版本控制jupyter笔记本",你会看到一大堆关于这个主题的帖子。
另外,Jupytext也可以帮助你,它允许你将笔记本保存为代码,然后你只需要将代码提交给git,同时你可以忽略笔记本进行版本控制。
他们的配对笔记本电脑避免了自动保存和转换笔记本电脑的需要。
jupyterlab/jupyterlab
中:Using a notebook & git creates too many diff #9444如果我们可以选择只保存输入单元格,而不保存输出单元格,并在不重启内核的情况下将单元格索引(execution_count)重置为0,那么事情会简单得多。-sylvain-bougnoux
我认为您可以配置底层的nbdiff忽略输出,请参见:网站-克拉索斯基https://nbdime.readthedocs.io/en/latest/config.html#configuring-ignores - krassowski
1.在
jupyterlab/jupyterlab-git
中:Cleaning Notebook cell outputs #392在版本控制中,笔记本单元格输出可能是一个障碍,同时审查提交的差异,以查看有什么变化(无论是在PR中还是历史上)
关于如何让用户在jupyterlab-git中处理单元格输出的一些想法
1.启用命令面板选项以使用nbstripout轻松安装Git过滤器
1.如果我们检测到在git推送过程中有单元格输出,则提示用户从单元格中移除输出
1.使用JupyterLab设置注册表让用户指定在git推送时必须清理所有Notebook输出
使用#700,现在可以在初始化git仓库时添加nbstripout(例如)。-fcollonval
为了您的学习目的/参考,我通过谷歌搜索"
github issues jupyter notebook put execution_count in separate file
"并查看排名靠前的搜索结果,并在他们的讨论线程中链接GitHub问题,找到了此信息。xmd2e60i2#
.ipynb
包含您的输入代码单元格、输出数据和各种元数据,以重现您在交互式运行笔记本时所看到的确切形式。不幸的是,“execution_count”只是其中之一,还有很多(细胞塌陷,扩展元数据等等),这些数据不会在笔记本的代码中表现出任何差异,因此,要在git中保留所有信息并产生有意义的差异是不可能的。虽然讨论了出于版本控制目的保留或丢弃哪些数据,但底层JSON格式无论如何都不适合此目的,例如,每个单元格中的每一行被编码为:
这与底层代码相比相当难以阅读。
一种可能性是使用Jupytext扩展名,它可以将
.ibynb
文件与一个常规的.py
文件配对,同时保留一些元数据,配对后的.py
文件可以用任何编辑器查看和编辑,可以很好地与git配合使用,并且不依赖于完整的jupyter基础设施。