有没有办法同时使用 Git 和 Jupyter 笔记本,同时无缝提交 py 文件而不是 ipynb?

san*_*tar 6 git github jupyter-notebook

我喜欢我的 github 存储库包含 py 文件而不是 ipynb 文件,但我更喜欢在做项目时使用 Jupyter。

理想情况下,我希望通过以下方式开展我的项目:

  • 从我正在处理的存储库执行 git pull,其中包含一个 .py 文件,我已将其转换为 Jupyter 笔记本中的 .py 文件
  • 在提交之前使用更改更新 Jupyter 笔记本
  • 将笔记本下载为 py 文件,然后进行提交,笔记本文件被 git 忽略

有没有办法执行此“更新 py 文件”操作,而无需手动将我的笔记本下载到 py 文件中,将我在“下载”文件夹中下载的 py 文件拖到我的工作目录中并手动替换之前现有的 py 文件终于做出承诺了吗?它看起来很不干净。

也许我也应该将我的 ipynb 放在存储库中,这样我就可以确保当我拉出笔记本时,笔记本是最新的并且与 py 文件完全相同?但我希望它对公众隐藏。

我只是希望能够使事情像仅使用 py 文件一样无缝,同时在 Jupyter 中进行实际工作,然后为公众提供最终代码为 py 文件,但我希望相对流畅地完成此操作,而无需大量手动操作拖放文件并替换旧文件。有点破坏了使用 git 的意义,因为我不再“优雅地”使用版本控制。

kra*_*ski 5

是的。jupytext可以通过所谓的“配对笔记本.ipynb”为您保持文件同步,只要您在受支持的客户端之一(例如 Jupyter Notebook 或 JupyterLab)中编辑这些文件即可。.py

.ipynb或者,您可以配置预提交 git hook 以在.py每次提交之前运行 jupytext 转换,这在此处记录。简而言之,您需要安装预提交- 例如:

pip install pre-commit
Run Code Online (Sandbox Code Playgroud)

然后.pre-commit-config.yaml使用以下命令创建/修改:

repos:
-   repo: https://github.com/mwouts/jupytext
    rev: v1.11.2  # (replace with the latest stable version)
    hooks:
    - id: jupytext
      args: [--from, ipynb, --to, "py"]
Run Code Online (Sandbox Code Playgroud)

如果您不想依赖 jupytext,也可以使用内置的 jupyter 转换功能配置预提交挂钩,但这将提供更少的配置选项

  • 问题是预提交需要跟踪“.ipynb”文件,如果它们是“.gitignored”,则不会转换它们。因此,据我所知,您必须在单独的预提交中取消它们。有解决办法吗? (4认同)