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との比較