.ipynb を .html へ変換 (with BatchFile)


結論

  • batchファイルを置いてClick! したら直下の.ipynbをhtmlへ変換してくれるものを作った
  • pythonが入っていない環境でも動く(はず)
  • toc2(目次機能)が自動で挿入される ← 本機能の一推しpoint!
  • macで作ったけど、windowsでもbuildしなおせば動く可能性あり。(未確認)

背景

  • 送られてきた大量の.ipynbの中身を確認するために、毎度毎度ローカルサーバーを立ち上げてnotebookを開くのが大変。 さらにいうと、他業務で異なるdirectoryで作業しているといくつもローカルサーバーを立てないといけなくて業務どころじゃなくなる。

既存の方法

jupyter nbconvert --to html hoge.ipynb
  • 方法2: 公式:Customizing nbconvert
    • template(以下の例だと"simplepython.tpl")を使ってhtml化。この方法だとtoc2などのnbextensionにある目次などもhtmlとして含められる
jupyter nbconvert --to python 'example.ipynb' --stdout --template=simplepython.tpl
  • 方法3: LocalServer上でnoebookを開いて保存

解決できない問題・課題

  • 大量の.ipynbをみないといけないときに辛い
  • template.tplのpathを忘れる
  • directoryの移動がめんどくさい
  • python環境にいろいろなpackage(jupyter, nbconvert, nbextensions, toc2.tpl etc...) を入れておかないといけない。(環境はsimpleであってほしい!)
    • ↑仮想環境を作ってちょこちょこ入れ替えているからpackageの有無なんて覚えてられない。

アプローチ

GUIベースの処理を実装する。(既存方法のコマンドを1つの実行ファイルにまとめる。)

  • 使ったpackage

    • pyinstaller: 1ファイルの実行ファイルを作成
    • jupyter: nbconvertなどの関数を利用し、text -> notebook形式 -> html へ変換していく
    • jinja2: template.tplをいくつか読み込む際に使用
    • toc2.tpl, full.tpl...: などのjupyternotebookを起動する際に、jinja2が読み込んでいるいろいろなtemplate
  • 具体的な中身は気が向いたら、追記予定

効果・結論

  • いまのところまともに動作していて、5秒でhtml化された便利
  • 残課題
    • ファイルサイズが大きく(50MBくらい)ありhddを圧迫する。
    • 処理時間が長い。できれば0.5秒くらいでhtml化まで終わってほしい。

おまけ(はまったところ)

  • テンプレート群をbatchfileの中に組み込むのに苦労した。
    というのも、以下のtemplate fileをpyinstallerが認識してくれなかったから。 textからhtmlへ変換するjinja2にとって必須のファイルなんだけどーー

    • toc2.tpl
    • full.tpl
    • nbextensions.tpl
    • mathjax.tpl
    • celltags.tpl
  • ↑の解決策として、.tplをハードコーディングして、stringとして読みむためのファイルを作った。(data_tpl.py) .pyfileだとpyinstallerは勝手に認識してくれるみたい。

  • あとは、stringで読み込んだtemplateをjinja2.dictLoaderで変換してあげれば、勝手にjinja2の継承({%- extends 'hogehoge.html' %})などもよしなにやってくれというわけなのだー