鴨川η

jupyter notebookをCUIで実行

はじめに

ノートPCで重い計算を含んだjupyter notebookを実行することはしんどいので,サーバーで実行したくなる. ただ実行するだけならnbconvertでpythonに変換すればいいのですが,実行した結果の出力が書き込まれたnotebookもほしい.

本題

nbconvertを使う.

以下,実行ファイルがhoge.ipynbとする.

1. notebookを実行し,別名で保存

jupyter nbconvert --to notebook --execute hoge.ipynb 実行結果が,hoge.nbconvert.ipynbというnotebookに保存される.

しかしデフォルトでは,nbconvertに実行時間に制約があり,セルを実行してから30秒間出力がないと終了する. その場合は以下の様に引数を追加してやる.

jupyter nbconvert --to notebook --ExecutePreprocessor.timeout=-1 --execute hoge.ipynb

2. 新しいファイルを作らずに上書き

--inplaceを使う.

なので jupyter nbconvert --to notebook --inplace --execute hoge.ipynb とすると新しいnotebookは作られずに上書きが行われる.

3. CLIで実行するとエラーに

condaを使って複数の環境がある状態で,notebookを作成するとKernel名がその名前になった. 今回は,ローカル環境ではpyenvでいれたanaconda (このとき,conda createで別環境も作ってあるがそっちではなく) でjupyter notebookを作り,サーバ上で上記の1.のようにCLI上で実行すると

jupyter_client.kernelspec.NoSuchKernel: No such kernel named Python [Root]

となり実行できない.

解決策としてはissueにある通り

--ExecutePreprocessor.kernel_name=python

をつけるだけ.

まとめ

以上をまとめてかくと次のようになる.

jupyter nbconvert --to notebook --ExecutePreprocessor.timeout=-1 --execute --inplace --ExecutePreprocessor.kernel_name=python hoge.ipynb

参考