Jupyter Notebookは、インタラクティブにPythonなどのプログラムを実行する環境として人気があります。 Jupyter Notebookで拡張機能を作る方法としてはnbextensionsがありますが、作りたいものによっては作成方法が若干複雑です。 そこで、nbextensionsではなくIPythonのマジックコマンドを使って便利ツールを簡単に作る方法を紹介します。
IPythonマジックコマンドを作る@shiba6v
View Slide
IPython,Jupyter NotebookとはIPython: Pythonのインタラクティブな実行環境.(Rubyで言うところのpry)Jupyter Notebookは,ブラウザでPythonを書けるIPythonベースの実行環境.(右図)セル単位で実行
IPythonマジックコマンドを使ってみる1行追加するだけで,便利機能が使える!例: 実行時間の計測この一行を追加
目次- マジックコマンドは何をしているのか- マジックコマンドでできること- マジックコマンドを作る- 今回の題材: import文の整理- 何もしないマジックコマンド- ライブラリの関数を持ってくる- その他の実装例- マジックコマンドの使いどころ- Nbextensionsとの比較
マジックコマンドは何をしているのかセル内のソースコード (文字列)1. バイトコードに変換2. 時間計測開始3. 実行4. 時間計測終了https://github.com/ipython/ipython/blob/master/IPython/core/magics/execution.py#L1184実行にかかった時間を出力%%time の例
マジックコマンドは何をしているのかセル内のソースコード (文字列)https://github.com/ipython/ipython/blob/master/IPython/core/magics/execution.py#L1184%%time の例ソースコードを使って,好きな処理をできる1. バイトコードに変換2. 時間計測開始3. 実行4. 時間計測終了実行にかかった時間を出力
マジックコマンドでできることPythonでできることは,マジックコマンドにできる..・時間を計測・time (Python), %%time (マジックコマンド)・実行時プロファイルを取得・cProfile (Python), %%prun (マジックコマンド)・変数をシリアライズして保存・pickle (Python), %store (マジックコマンド)
IPythonのマジックコマンドを作るPythonの便利ツールをマジックコマンドとして使えるように実装する.便利ツールが1行で使えると,開発が捗る!
今回の題材import文グチャグチャになりがち問題
今回の題材import文グチャグチャになりがち問題同じモジュールを何回もimport
今回の題材import文グチャグチャになりがち問題同じモジュールなのに別の場所でimportしている
今回の題材import文グチャグチャになりがち問題自作モジュールをライブラリと区別したい.
import文を整理するPythonツールisorthttps://github.com/timothycrosley/isort$ isort src.py
import文を整理するPythonツールisortJupyter Notebookでもやりたい!https://github.com/timothycrosley/isort$ isort src.py
マジックコマンド %%isort を作るJupyter Notebookでも同じようなツールが欲しい・・・こんな感じで・・・
何もしないマジックコマンド何もしないで出力してみる
ライブラリの関数を持ってくる$ isort src.pyisort.main:main を呼んでいることがわかる
ライブラリの関数を持ってくる$ isort src.py
マジックコマンド %%isort を作るできた!
マジックコマンド %%isort を作るちょっとリッチな出力もできる.
マジックコマンド %%isort を作るPythonスクリプトとして書いて,importすればきれいに!
マジックコマンド %%isort を作る作り方説明 終わり
その他の実装例shape_commentator行列の次元をコメントとして付けてくれる (自作ツール)内部的にはASTをいじって実行している.https://github.com/shiba6v/shape_commentator
その他の実装例mypyPythonで静的型チェックhttps://github.com/shiba6v/mypy_ipython
マジックコマンドの使いどころなぜマジックコマンドを作りたかったか?.pyファイルにしか適用できない便利ツールをJupyterでも使いたい!
マジックコマンドの使いどころマジックコマンドの悪い点Pythonファイルに変換した時に,読みづらくIPython環境なしでは実行できない$ jupyter nbconvert --to script src.ipynb
Nbextensionsとの比較Nbextensions: Jupyter Notebookの拡張機能 (公式)JavaScriptで作る.
Nbextensionsとの比較IPythonマジックコマンド Nbextensions主に使う言語 Python JavaScript
Nbextensionsとの比較IPythonマジックコマンド Nbextensions主に使う言語 Python JavaScriptJupyter NotebookのJavaScript APIを使う× (できなくはないが非常にやりづらい)◯
Nbextensionsとの比較IPythonマジックコマンド Nbextensions主に使う言語 Python JavaScriptJupyter NotebookのJavaScript APIを使う× (できなくはないが非常にやりづらい)◯作りやすさ ◯ (物によっては数行) △ (インストール・エスケープ処理したりといった手間 )
Nbextensionsとの比較IPythonマジックコマンド Nbextensions主に使う言語 Python JavaScriptJupyter NotebookのJavaScript APIを使う× (できなくはないが非常にやりづらい)◯作りやすさ ◯ (物によっては数行) △ (インストール・エスケープ処理したりといった手間 )他のIPythonフロントエンド(IPython, Jupyter Lab,VSCodeなど) でも動く◯ (JavaScriptでJupyterNotebookのAPIを使わなければ大丈夫)×
マジックコマンドで開発を加速させよう
おわり- マジックコマンドは何をしているのか- マジックコマンドでできること- マジックコマンドを作る- 今回の題材: import文の整理- 何もしないマジックコマンド- ライブラリの関数を持ってくる- その他の実装例- マジックコマンドの使いどころ- Nbextensionsとの比較