Jupyter Notebook のカーネルを自動でテストする方法はいくつかあるようだけど、ユーザが使うことを想定しているような実装には見えない。今回は、nbformat
を使って Python
プログラムから notebook(.ipynb ファイル)を作って実行し結果を確認する方法について記録しておく。
Notebook の作成
import nbformat
nb = nbformat.v4.new_notebook()
title = "Python3 Test Notebook"
code = """
import sys
print(sys.version)
"""
nb["cells"] = [
nbformat.v4.new_markdown_cell(title),
nbformat.v4.new_code_cell(code)
]
with open("/notebook/Python3Test.ipynb", "w") as f:
nbformat.write(nb, f)
こんな感じにすると、1つ目のセルに Python
のバージョンをチェックするコードが入った notebook が Python3Test.ipynb
の名前で保存される。
Notebook の実行
$ jupyter nbconvert --ExecutePreprocessor.kernel_name=<kernel> --to notebook --execute --inplace /notebook/Python3Test.ipynb
このようにすると、notebook を実行して結果を同ファイルに上書きしてくれる。
Notebook の中身の確認
import sys
import nbformat
with open(sys.argv[1]) as f:
nb = nbformat.read(f, as_version=4)
for cell in nb['cells']:
if 'outputs' in cell:
for output in cell['outputs']:
print(output['text'])
スクリプト実行するときに第一引数に notebook のファイル名を指定する。notebook 内の結果部分だけがすべて標準出力に出る。