【JupyterNotebook】.ipynbファイル保存時に.pyファイルを自動作成する

2 min読了の目安(約1200字TECH技術記事

環境

JupyterNotebookのDockerコンテナを使用
macOS 10.15.6

手順

グローバル環境の設定が必要
コンソールを開きDockerコンテナに入った後、jupyter_notebook_config.pyを開く

cd /root/.jupyter/
vi jupyter_notebook_config.py

以下のサイトのExapleにある2つのソースコードをコピーして、下の方に貼り付ける
File save hooks - Jupyter Notebook 6.1.4 documentation

ファイルを保存した後、dockerコンテナを再起動する
適当なJupyterNotebookを開いて保存するとpythonファイルができていることを確かめる

.pyをpythonディレクトリ配下に保存する

このままだと.pyは.ipynbと同階層に保存される
pythonディレクトリ配下に保存して.pyファイルをまとめたかったので、script_post_save関数の一部を以下を修正する

修正前

script_fname = base + resources.get('output_extension', '.txt')
log.info("Saving script /%s", to_api_path(script_fname, contents_manager.root_dir))

with io.open(script_fname, 'w', encoding='utf-8') as f:
    f.write(script)

script_fnameに作られる.pyのパスが入っているので新しいパスにして保存させる

修正後

script_fname = base + resources.get('output_extension', '.txt')
log.info("Saving script /%s", to_api_path(script_fname, contents_manager.root_dir))
# ここから
dir_path = script_fname[:script_fname.rfind('/')] + '/python'
os.makedirs(dir_path, exist_ok=True)
py_file_path = dir_path + script_fname[script_fname.rfind('/'):]

with io.open(py_file_path, 'w', encoding='utf-8') as f:
	f.write(script)
# ここまで