ipynb へ変換するツール, jupytext
色々とipynb へ変換するツールを探していくうちに、
jupytext にたどり着いた。
変換するコマンドも他のツール同様シンプルなので、使いやすそう。

以下のQiitaの記事によると、jupyternotobook のCodeの部分だけ分けてGitで管理することもできそう。
https://qiita.com/cfiken/items/8455383f32ee19dfbba3
pip install 後に、試してみた。
ファイル名を引き継いだ、ipynbが以下のように自動生成される。
$ pip install jupytext --upgrade
Collecting jupytext
Downloading https://files.pythonhosted.org/packages/bc/71/eaba4f15759a8295e51dd8bffcb5bbd076a2e1742da56509fe5ade1271ec/jupytext-1.5.2.tar.gz (677kB)
|████████████████████████████████| 686kB 2.1MB/s
Requirement already satisfied, skipping upgrade: nbformat>=4.0.0 in /usr/lib/python3.7/site-packages (from jupytext) (5.0.7)
Collecting pyyaml
Downloading https://files.pythonhosted.org/packages/64/c2/b80047c7ac2478f9501676c988a5411ed5572f35d1beff9cae07d321512c/PyYAML-5.3.1.tar.gz (269kB)
|████████████████████████████████| 276kB 8.0MB/s
Collecting toml
Downloading https://files.pythonhosted.org/packages/9f/e1/1b40b80f2e1663a6b9f497123c11d7d988c0919abbf3c3f2688e448c5363/toml-0.10.1-py2.py3-none-any.whl
Requirement already satisfied, skipping upgrade: ipython-genutils in /usr/lib/python3.7/site-packages (from nbformat>=4.0.0->jupytext) (0.2.0)
Requirement already satisfied, skipping upgrade: jupyter-core in /usr/lib/python3.7/site-packages (from nbformat>=4.0.0->jupytext) (4.6.3)
Requirement already satisfied, skipping upgrade: traitlets>=4.1 in /usr/lib/python3.7/site-packages (from nbformat>=4.0.0->jupytext) (4.3.3)
Requirement already satisfied, skipping upgrade: jsonschema!=2.5.0,>=2.4 in /usr/lib/python3.7/site-packages (from nbformat>=4.0.0->jupytext) (3.2.0)
Requirement already satisfied, skipping upgrade: decorator in /usr/lib/python3.7/site-packages (from traitlets>=4.1->nbformat>=4.0.0->jupytext) (4.4.1)
Requirement already satisfied, skipping upgrade: six in /usr/lib/python3.7/site-packages (from traitlets>=4.1->nbformat>=4.0.0->jupytext) (1.13.0)
Requirement already satisfied, skipping upgrade: pyrsistent>=0.14.0 in /usr/lib/python3.7/site-packages (from jsonschema!=2.5.0,>=2.4->nbformat>=4.0.0->jupytext) (0.16.0)
Requirement already satisfied, skipping upgrade: importlib-metadata; python_version < "3.8" in /usr/lib/python3.7/site-packages (from jsonschema!=2.5.0,>=2.4->nbformat>=4.0.0->jupytext) (1.5.0)
Requirement already satisfied, skipping upgrade: attrs>=17.4.0 in /usr/lib/python3.7/site-packages (from jsonschema!=2.5.0,>=2.4->nbformat>=4.0.0->jupytext) (19.3.0)
Requirement already satisfied, skipping upgrade: setuptools in /usr/lib/python3.7/site-packages (from jsonschema!=2.5.0,>=2.4->nbformat>=4.0.0->jupytext) (41.6.0)
Requirement already satisfied, skipping upgrade: zipp>=0.5 in /usr/lib/python3.7/site-packages (from importlib-metadata; python_version < "3.8"->jsonschema!=2.5.0,>=2.4->nbformat>=4.0.0->jupytext) (3.0.0)
Installing collected packages: pyyaml, toml, jupytext
Running setup.py install for pyyaml ... done
Running setup.py install for jupytext ... done
Successfully installed jupytext-1.5.2 pyyaml-5.3.1 toml-0.10.1
$ jupytext --to notebook 41_1_a_1.py
[jupytext] Reading 41_1_a_1.py
[jupytext] Writing 41_1_a_1.ipynb
python スクリプト更新後、もう一度実行すると、上書きしてくれる(オプション不要)
$ jupytext --to notebook 41_1_a_1.py
[jupytext] Reading 41_1_a_1.py
[jupytext] Writing 41_1_a_1.ipynb (destination file replaced)
変換後に気づいたpythonスクリプトへの細かい修正
ipynbを見ると、もとのPythonスクリプトに改行が不必要にあると、
そこが空白Cellとしてipynbへ変換されてしまうので、
notebookがかえって見づらくなってしまうことがある。
それを防ぐために、jupytext でpyスクリプトを変換する前に、
以下の点を置換して修正することにした。
正規表現を使って, py to ipynb を 見やすいように整理する。
1. 3つ以上の改行がある場合、2つにする。
(\r\n){3,}
->
\r\n\r\n
2. 文章の終わりに改行を加える
。\r\n
->
。 \r\n
3. 文章ブロック内で、コードブロックが開始する前に、改行を加える
^#~~~python
->
\r\n#~~~python