gpt4 book ai didi

jupyter-notebook - 如何避免 Jupyter 单元 ID 一直在变化,从而避免发送 VCS 差异?

转载 作者:行者123 更新时间:2023-12-04 12:55:35 29 4
gpt4 key购买 nike

q/66678305 中所述,较新的 Jupyter 版本除了存储单元格的源代码和输出之外还存储 ID为例如目的链接到一个单元格。
然而,这些 ID 并不稳定,即使没有触及单元的源代码,它们也会经常发生变化。因此,如果您有 .ipynb版本控制下的文件,例如git,提交最终有很多听起来很有趣的“更改行”,与提交中所做的任何实际更改都不对应。喜欢,
{
"cell_type": "代码",
“执行计数”:空,
- "id": "尊重-违反",
+ "id": "事件获胜",
“元数据”:{},
“输出”:[],
有没有办法防止这种情况?

最佳答案

回答 Linux 上的 Git。可能也适用于 MacOS,但不适用于 Windows。
最好不要 VCS .ipynb文件由 Jupyter 保存,而是一个不包含所有 volatile 信息的过滤版本。为此,可以使用各种 git 钩子(Hook);我使用的是基于 https://github.com/toobaz/ipynb_output_filter/blob/master/ipynb_output_filter.py .
奇怪的是,事实证明无法修改此脚本以删除 "id"来自单元格的字段。也就是说,如果您尝试在过滤循环中删除该字段,例如

        for field in ("prompt_number", "execution_number", "id"):
if field in cell:
del cell[field]
然后是 write函数来自 jupyter_nbformat只会放一个 id返回。可以仅将 id 更改为常量,但是 Jupyter 会提示不唯一的 id。
作为规避这个的技巧,我现在使用这个过滤器和一个简单的 grep删除ID:
#!/bin/bash
grep -v '^ *"id": "[a-z\-]*",$'
将其存储在例如 ~/bin/ipynb_output_filter.sh ,使其可执行( chmod +x ~/bin/ipynb_output_filter.sh )并确保您具有以下 ~/.gitattributes文件:
*.ipynb filter=dropoutput_ipynb
并在您的 git 配置中(全局 ~/.gitconfig 或项目)
[core]
attributesfile = ~/.gitattributes
[filter "dropoutput_ipynb"]
clean = ~/bin/ipynb_output_filter.sh
smudge = cat
如果你想使用标准的 python 过滤器,你可以在 grep 之前调用它。在 ~/bin/ipynb_output_filter.sh , 喜欢
#!/bin/bash
~/bin/ipynb_output_filter.py | grep -v '^ *"id": "[a-z\-]*",$'

关于jupyter-notebook - 如何避免 Jupyter 单元 ID 一直在变化,从而避免发送 VCS 差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68037147/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com