Jupyter NotebookをGitで管理する方法
はじめに
Gitを練習していた際に、「Jupyter NotebookとGitって相性が悪いのでは?」と疑問に思い、調べてみました。
本記事では、Jupyter NotebookをGitで管理する際の問題点と、それを解決する方法について紹介します。
結論
Jupyter Notebook (.ipynb
) はGitとの相性が悪いですが、解決策として以下の方法が挙げられます。
-
.ipynb
をGitで管理するならnbstripout
を使用する -
.py
ファイルで管理するなら# %%
を使う
特に .py
ファイルで # %%
を使えば、.ipynb
と同じように実行できるので、Git管理の手間を省けます。
GitとJupyter Notebookの相性について
Jupyter NotebookがGitと相性が悪い主な理由はJSON形式で保存されることにあります。
- 実行結果やメタデータが含まれる
- コードに変更がなくても、出力結果をクリアすると変更として認識されてしまう
- 不要な差分が発生する
- Gitの差分確認時にメタデータの変更が表示され、視認性が悪くなる
このため、Jupyter NotebookをGitで管理するとメタデータの差異を手動で無視する必要があり、非常に面倒です。
nbstripout
ライブラリを使用
解決方法1: .ipynb
をGitで管理したい場合、nbstripout
を使用すると、出力やメタデータを削除 できます。
nbstripout
のインストール
1. pip install nbstripout
nbstripout
を有効化
2. Gitリポジトリで nbstripout --install
.gitattributes
を設定
3. echo "*.ipynb filter=nbstripout" >> .gitattributes
この設定を行うと、Gitで .ipynb
を管理する際に 出力やメタデータの差分が無視される ようになります。
なお、グローバルに適用したい場合は --global
や --system
オプションも使用できます。
jupytext
ライブラリを使用
解決方法2: jupytext
を使うと、.ipynb
を .py
に変換し、双方向で同期できるようになります。
jupytext
のインストール
1. pip install jupytext
.py
ファイルに変換
2. jupytext --set-formats ipynb,py my_notebook.ipynb
この方法を使うと、.py
をGitで管理しつつ、Notebook形式にも変換できます。
VSCodeでの利用
ただし、VSCodeでの自動同期には標準機能がなく、拡張機能が必要になります。
利用者が少ないようですが、VSCodeで .py
と .ipynb
を同期したい場合には便利です。
# %%
を使用する
解決方法3: 実は、Jupyter Notebookを使わなくても、Pythonのスクリプト (.py
) に # %%
を使えば、セルごとに実行できます。
# %%
import os
print("Hello")
この方法を使えば、.py ファイルだけをGitで管理しながら、Jupyter Notebookのような使い勝手を維持できます。
まとめ
管理方法 | 特徴 |
---|---|
.ipynb をGitで管理 |
nbstripout を使って出力やメタデータを削除 |
.py で管理 |
# %% を使えばJupyter Notebook風に運用可能 |
.ipynb と .py を同期 |
jupytext を使用(ただしVSCodeでは拡張機能が必要?) |
参考
さいごに
Gitの学習中に疑問に思ったことが解決してスッキリしました。
最近 .ipynb
の利用が減っているのかどうか、少し気になりますね。
Discussion