こここブログ

機械学習, 統計分析, 競技プログラミング, CTF, VR, ……テクノロジーへの憧憬に身を焼かれている人のメモ帳です

Jupyter Notebook保存時にpyファイルも一緒に保存・更新できるとgitでの差分管理が楽

2019-07-19 公開 / 2019-07-30 更新

Jupyter好きなんだけどgitでの差分管理がつらい。

pyファイルを保存すれば差分が見られるようになるが、Jupyter Notebookのメニューからpyファイルを保存すると、いらない情報も一緒に保存されて差分管理の邪魔。

そんなときに便利なのがjupytext。Jupyter Notebook保存時にpyファイルも一緒に保存・更新してくれる。

さらに、pyファイル側の編集結果がipynbファイルに反映されるため、ipynbでは面倒なセルをまたいだ一括置換などがやりやすくなる。

手順

詳細は以下の記事。自分の環境での設定時に参考にさせていただきました。ありがとうございました。

ただ1点、自分の環境では~/.jupyter/jupyter_notebook_config.pyではなく~/.jupyter/jupyter_notebook_config.jsonだったのでその部分についてメモ。

minmin-21.hatenablog.com

以下では上の記事での手順をまとめているので、記事内の

3.jupyter notebookを立ち上げ、Edit>Edit Notebook Metadataを開き、以下を追加

部分は不要になっている。

pip install jupytextを実行し、jsonファイルを以下のように編集するだけで全ipynbに勝手に適用される。*1

~/.jupyter/jupyter_notebook_config.jsonに以下の内容を追加してJupyter Notebookを再起動すればOK。*2

自分の環境ではnbextensionを入れていた関係か、jsonファイルが以下の形で存在していた。

{
  "NotebookApp": {
    "nbserver_extensions": {
      "jupyter_nbextensions_configurator": true
    }
  }
}

このjsonファイルに、上の記事を参考に追記する。

{
  "NotebookApp": {
    "nbserver_extensions": {
      "jupyter_nbextensions_configurator": true
    },
    "contents_manager_class":"jupytext.TextFileContentsManager"
  },
  "ContentsManager": {
    "default_jupytext_formats":"ipynb,py"
  }
}

これでいい感じにgitで差分管理できるはず。

もっと早くから設定しておけばよかった...。

*1:注)jsonファイルは共通で参照されるため一度編集すれば問題ないが、jupytextパッケージは各仮想環境でインストールが必要。久しぶりに使う仮想環境でjupyter notebookが起動しない場合、pip install jupytextを忘れている場合があるため注意。

*2:jsonファイルがない場合は作れば良い?