Jupytextしたい(jupytext
)
// notebooksをmarkdownに変換
$ jupytext --set-formats ipynb,md:myst ファイル.ipynb
$ jupytext --sync ファイル.ipynb
$ jupytext --sync ファイル.md
jupytext
でノートブック(ipynb
)をテキスト形式のファイルに変換/ペアリングできます。
ノートブックの使い勝手はそのままに、
Gitなどを使ったファイル管理をより簡単にするためのツールです。
注釈
Pythonのコーディングをするときにノートブックは欠かせません。 しかし、ノートブックの中身はJSON形式であるため、Gitなどで管理していてもその差分の確認は(人間には)とても難解です。 マージコンフリクトが生じたときの修正は、とてもとても大変です。
また、図などをそのままにしておくと、ipynb
形式のファイルはすぐに肥大化してしまいます。
ある程度のサイズになると、Git LFSに追加する必要がでてきます。
Jupytextは、そのような課題を解決してくれます。
インストールしたい(jupytext
)
pipx
でインストール
$ pipx install jupytext
poetry
でインストール
$ poetry add jupytext --group=dev
uv
でインストール
$ uv tool install jupytext
ペアリングしたい(--set-formats
)
$ jupytext --set-formats ipynb,md:myst ファイル.ipynb
[jupytext] Reading ファイル.ipynb in format ipynb
[jupytext] Updating notebook metadata with '{"jupytext": {"formats": "ipynb,md:myst"}}'
[jupytext] Updating ファイル.ipynb
[jupytext] Updating ファイル.md
--set-formats
オプションで形式を指定することで、
ファイルとファイルをペアリングできます。
上記サンプルではipynb
形式のノートブックと
md:myst
形式のテキストファイルをペアリングしています。
注釈
// .ipynbから.mdに変換
$ jupytext --to md:myst ファイル名.ipynb
// .ipynbから.pyに変換
$ jupytext --to py:percent ファイル名.ipynb
指定したフォーマットに変換できる
--to フォーマット
(や--from フォーマット
)オプションもあります。
このオプションはただの変換するだけで、ファイル間のペアリングはされません。
Jupytextを使うのであれば--set-formats
オプションを使えばよいと思います。
ディレクトリ分割したい
$ jupytext --set-formats notebooks//ipynb,markdowns//md:myst notebooks/*.ipynb
ノートブック用、Markdown用、スクリプト用に ディレクトリを分割したまま、ペアリングすることもできます。
参考
僕はノートブックは機能の確認や単体テスト用に作成することが多く、とりあえずnotebooks
という専用のディレクトリの中で管理することにしています。
この中に同名の.md
ファイルなどが作成されると、ファイルを開くときに難儀します。
なので、Jupytextで連携したファイルたちはディレクトリを分割して管理することにしています。
同期したい(--sync
)
$ jupytext --sync ファイル.ipynb
[jupytext] Reading ファイル.ipynb in format ipynb
[jupytext] Loading ファイル.md
[jupytext] Unchanged ファイル.ipynb
[jupytext] Updating ファイル.md
--sync
オプションでファイル間の同期をとることができます。
ペアリングしたファイルであれば、どのファイルを編集してもOKです。
全体設定したい(jupytext.toml
)
1# ペアリングの設定
2# ディレクトリを分割して連携
3[formats]
4"notebooks/" = "ipynb"
5"markdowns/" = "md:myst"
6"scripts/" = "py:light"
7
8# ノートブックのメタデータの設定
9notebook_metadata_filter = ""
10
11# セルのメタデータの設定
12cell_metadata_filter = ""
プロジェクトルートに配置したjupytext.toml
またはpyproject.toml
に
Jupytextの全体設定を記述できます。
notebook_metadata_filter
で、
ノートブックのメタデータに残す情報を設定できます。
cell_metadata_filter
で
セルのメタデータに残す情報を設定できます。
コミットフックしたい
# .pre-commit-config.yaml
repos:
- repo: ...
- repo: https://github.com/mwouts/jupytext
rev: v1.16.4b
hooks:
- id: jupytext
args: [--sync]
pre-commit-hook
も用意されています。
.pre-commit-config.yaml
に追加することで、
コミット直前に自動的にファイル間の同期をとることができます。