Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
IPython マジックコマンドを作る @shiba6v
Slide 2
Slide 2 text
IPython,Jupyter Notebookとは IPython: Pythonのインタラクティブな 実行環境. (Rubyで言うところのpry) Jupyter Notebookは,ブラウザで Pythonを書けるIPythonベースの実 行環境.(右図) セル単位で実行
Slide 3
Slide 3 text
IPythonマジックコマンドを使ってみる 1行追加するだけで,便利機能が使える! 例: 実行時間の計測 この一行を追加
Slide 4
Slide 4 text
目次 - マジックコマンドは何をしているのか - マジックコマンドでできること - マジックコマンドを作る - 今回の題材: import文の整理 - 何もしないマジックコマンド - ライブラリの関数を持ってくる - その他の実装例 - マジックコマンドの使いどころ - Nbextensionsとの比較
Slide 5
Slide 5 text
マジックコマンドは何をしているのか セル内のソースコード (文字列) 1. バイトコードに変 換 2. 時間計測開始 3. 実行 4. 時間計測終了 https://github.com/ipython/ipython/blob/master/IPython/core/magics/execution.py#L1184 実行にかかった時 間を出力 %%time の例
Slide 6
Slide 6 text
マジックコマンドは何をしているのか セル内のソースコード (文字列) https://github.com/ipython/ipython/blob/master/IPython/core/magics/execution.py#L1184 %%time の例 ソースコードを使って,好きな処理をできる 1. バイトコードに変 換 2. 時間計測開始 3. 実行 4. 時間計測終了 実行にかかった時 間を出力
Slide 7
Slide 7 text
マジックコマンドでできること Pythonでできることは,マジックコマンドにできる.. ・時間を計測 ・time (Python), %%time (マジックコマンド) ・実行時プロファイルを取得 ・cProfile (Python), %%prun (マジックコマンド) ・変数をシリアライズして保存 ・pickle (Python), %store (マジックコマンド)
Slide 8
Slide 8 text
IPythonのマジックコマンドを作る Pythonの便利ツールをマジックコマンドとして使えるように実装する. 便利ツールが1行で使えると,開発が捗る!
Slide 9
Slide 9 text
今回の題材 import文 グチャグチャになりがち問題
Slide 10
Slide 10 text
今回の題材 import文 グチャグチャになりがち問題 同じモジュールを何回もimport
Slide 11
Slide 11 text
今回の題材 import文 グチャグチャになりがち問題 同じモジュールなのに別の場所で importしている
Slide 12
Slide 12 text
今回の題材 import文 グチャグチャになりがち問題 自作モジュールをライブラリ と区別したい.
Slide 13
Slide 13 text
import文を整理するPythonツール isort https://github.com/timothycrosley/isort $ isort src.py
Slide 14
Slide 14 text
import文を整理するPythonツール isort Jupyter Notebookでもやりたい! https://github.com/timothycrosley/isort $ isort src.py
Slide 15
Slide 15 text
マジックコマンド %%isort を作る Jupyter Notebookでも同じようなツールが欲しい・・・ こんな感じで・・・
Slide 16
Slide 16 text
何もしないマジックコマンド 何もしないで出力してみる
Slide 17
Slide 17 text
何もしないマジックコマンド 何もしないで出力してみる
Slide 18
Slide 18 text
何もしないマジックコマンド 何もしないで出力してみる
Slide 19
Slide 19 text
ライブラリの関数を持ってくる $ isort src.py isort.main:main を呼んでいるこ とがわかる
Slide 20
Slide 20 text
ライブラリの関数を持ってくる $ isort src.py
Slide 21
Slide 21 text
マジックコマンド %%isort を作る できた!
Slide 22
Slide 22 text
マジックコマンド %%isort を作る ちょっとリッチな出力も できる.
Slide 23
Slide 23 text
マジックコマンド %%isort を作る Pythonスクリプトとして書いて ,importすればきれいに!
Slide 24
Slide 24 text
マジックコマンド %%isort を作る 作り方説明 終わり
Slide 25
Slide 25 text
その他の実装例 shape_commentator 行列の次元をコメントとして 付けてくれる (自作ツール) 内部的にはASTをいじって 実行している. https://github.com/shiba6v/shape_commentator
Slide 26
Slide 26 text
その他の実装例 mypy Pythonで 静的型チェック https://github.com/shiba6v/mypy_ipython
Slide 27
Slide 27 text
マジックコマンドの使いどころ なぜマジックコマンドを作りたかったか? .pyファイルにしか適用できない便利ツールをJupyterでも使いたい!
Slide 28
Slide 28 text
マジックコマンドの使いどころ マジックコマンドの悪い点 Pythonファイルに変換した時に, 読みづらくIPython環境なしでは実行できない $ jupyter nbconvert --to script src.ipynb
Slide 29
Slide 29 text
Nbextensionsとの比較 Nbextensions: Jupyter Notebookの拡張機能 (公式) JavaScriptで作る.
Slide 30
Slide 30 text
Nbextensionsとの比較 IPythonマジックコマンド Nbextensions 主に使う言語 Python JavaScript
Slide 31
Slide 31 text
Nbextensionsとの比較 IPythonマジックコマンド Nbextensions 主に使う言語 Python JavaScript Jupyter Notebookの JavaScript APIを使う × (できなくはないが非常にや りづらい) ◯
Slide 32
Slide 32 text
Nbextensionsとの比較 IPythonマジックコマンド Nbextensions 主に使う言語 Python JavaScript Jupyter Notebookの JavaScript APIを使う × (できなくはないが非常にや りづらい) ◯ 作りやすさ ◯ (物によっては数行) △ (インストール・エスケープ 処理したりといった手間 )
Slide 33
Slide 33 text
Nbextensionsとの比較 IPythonマジックコマンド Nbextensions 主に使う言語 Python JavaScript Jupyter Notebookの JavaScript APIを使う × (できなくはないが非常にや りづらい) ◯ 作りやすさ ◯ (物によっては数行) △ (インストール・エスケープ 処理したりといった手間 ) 他のIPythonフロントエンド (IPython, Jupyter Lab, VSCodeなど) でも動く ◯ (JavaScriptでJupyter NotebookのAPIを使わなけ れば大丈夫) ×
Slide 34
Slide 34 text
マジックコマンドで開発を加速させよう
Slide 35
Slide 35 text
おわり - マジックコマンドは何をしているのか - マジックコマンドでできること - マジックコマンドを作る - 今回の題材: import文の整理 - 何もしないマジックコマンド - ライブラリの関数を持ってくる - その他の実装例 - マジックコマンドの使いどころ - Nbextensionsとの比較