【问题标题】:Using nbdime for Jupyter notebooks under PyCharm在 PyCharm 下将 nbdime 用于 Jupyter 笔记本
【发布时间】:2018-04-08 11:27:16
【问题描述】:

我正在使用nbdime 来区分和合并 Jupyter 笔记本,除了对于大型笔记本来说有点慢之外,我喜欢它。但是,当我尝试从 PyCharm 中进行版本控制时,我的 git 设置似乎被忽略了,它对 .ipynb 文件进行了文本差异。

我的.gitconfig 有以下内容,我相信是在我安装nbdime 时设置的:

[diff "jupyternotebook"]
        command = git-nbdiffdriver diff
[merge "jupyternotebook"]
        driver = git-nbmergedriver merge %O %A %B %L %P
        name = jupyter notebook merge driver
[difftool "nbdime"]
        cmd = git-nbdifftool diff \"$LOCAL\" \"$REMOTE\"
[difftool]
        prompt = false
[mergetool "nbdime"]
        cmd = git-nbmergetool merge \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
[mergetool]
        prompt = false

从命令行,这很好用。 (好吧,我从来不需要进行合并,但差异效果很好。)

另外,我看到您可以在 PyCharm 中指定一个外部差异工具,但这似乎是一个全局设置。

有人让这个工作吗?

【问题讨论】:

  • 你能显示你的设置吗?
  • 您介意我更新您的标题和标签以包含 DataSpell 吗? :)

标签: git pycharm jupyter


【解决方案1】:

2021 年 11 月 29 日更新

由于这非常依赖于设置,您可能需要调整以下内容。

我正在使用:

  • macos 12.01
  • miniconda 作为我的基本用户 python (3.9.7)
  • 每个项目我都有 virtualenv 和 conda 的组合

使用 nbdime 来区分我的笔记本...

  1. 首先找出为您安装 nbdime 的位置。在 Mac/Linux 上: which nbdiff-web
  2. 在 PyCharm 或 IDEA 中,导航到 Preferences -> Tools -> Diff & Merge -> External Diff Tools
  3. 确保选中“使用外部差异工具:”
  4. 可执行文件的路径:第 1 步的完全限定路径
    • 我的是/Users/dork/miniconda/bin/nbdiff-web
  5. 参数:--ignore-details --ignore-metadata --ignore-outputs %1 %2
    • 这些标志假定您不想区分执行计数、元数据和输出
  6. 点击应用

使用它:

  1. 打开笔记本的差异
  2. 单击顶部倒数第二个按钮的图标(? 之前)。看起来像一把锤子和扳手。它可能被扩展器隐藏。

【讨论】:

  • 非常感谢 - 太棒了 - 这是一个奇迹(当然也适用于 DataSpell)!您是否也设法让合并工作?
  • 哈哈。即使我点击了“启用外部合并工具”,我也不知道如何从 PyCharm/IDEA/DataSpell 中启动外部合并工具。 FWIW,我的可执行文件路径是nbdiff-merge,我的参数是--ignore-outputs --ignore-metadata --ignore-id --out %4 %3 %1 %2,如果你想通了,请告诉我!
【解决方案2】:

@debugme 答案对我不起作用(在 Windows 下,使用 Anaconda Python + PyCharm 2018.2)。存在三个问题:

  • nbdime 需要 Python,但在 Anaconda 下,Python 解释器无法全局使用(即在 PATH 中),只有在激活相关的 conda 环境时才可用。
  • 不确定是 PyCharm 还是 nbdime 的变化 - 但我的 PyCharm 在比较时只传递​​了两个参数,而 git-nbdifftool 需要 3 个。
  • 答案解释了如何为差异设置nbdime,但我也希望它用于合并。

所以,这对我有用:

  1. 使用以下命令创建批处理文件pycharm_nb_diff.bat

    call %USERPROFILE%\AppData\Local\Continuum\anaconda3\Scripts\activate.bat
    nbdiff-web --ignore-details %*
    exit /b %errorlevel%
    
    • 请注意,我使用的是 nbdiff-web 而不是 git-nbdifftool
    • --ignore-details 开关在比较单元格时忽略了一些差异(主要是execution_count,它是单元格旁边方括号中的小数字)。您可以移除该开关以获得更全面的差异。
    • 调用 activate.bat 在 conda 环境中运行该工具(我使用的位置是 Windows 下的默认位置)。
    • 顺便说一句,conda 4.6.0 重新引入了conda-run,它比activate.bat 更受欢迎,但目前仅在Linux 下支持。
  2. 现在将 PyCharm 设置为使用 pycharm_nb_diff.bat 和参数 %1 %2

  3. 以同样的方式,使用nbmerge-web 而不是nbdiff-web 创建pycharm_nb_merge.bat,并将PyCharm 设置为将其用作合并工具。请注意,合并所需的参数不同:--out %4 %3 %1 %2

    • 感谢脚本中的exit /b %errorlevel% 行,您可以在PyCharm 中选中信任进程退出代码 框并按预期合并工作。

【讨论】:

    猜你喜欢
    • 2020-03-17
    • 2017-02-18
    • 2017-08-18
    • 2017-05-25
    • 2021-01-02
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    • 2019-10-19
    相关资源
    最近更新 更多