IPython メモ2016年3月27日 | |
はじめにIPython についてのメモ。 環境
IPython の起動IPython は、Python 用の対話型インターフェイスであるが、今では Jupyter として Python 以外の言語もサポートする環境となっている。でも IPython 自体もまだ健在である。以下のように起動する。 $ ipython GUI のコンソールを起動するには次のようにする。 $ ipython qtconsole IPython Notebook (Jupyter Notebook) は次のように起動する。 $ ipython notebook GUI コンソール、Notebook では matplotlib の表示を結果の部分に埋め込むことができる。 履歴IPython の実行は次のような感じである。 In [1]: a = 1 In [2]: a Out[2]: 1 "In" や "Out" はただのラベルではなくて、これらには次のようにしてアクセスことができる。 In [1]: a = 1 In [2]: a Out[2]: 1 In [3]: In[1] Out[3]: u'a = 1' In [4]: Out[2] Out[4]: 1 "In"、"Out" の代りに "_i"、"_" でもよい。 In [1]: a = 1 In [2]: a Out[2]: 1 In [3]: _i1 Out[3]: u'a = 1' In [4]: _2 Out[4]: 1 ただの "_"、"__" (アンダースコア 2 つ) でそれぞれ直前の結果、さらにその前の結果にアクセスできる。 In [1]: a = 1 In [2]: a Out[2]: 1 In [3]: a + 1 Out[3]: 2 In [4]: (_, __) Out[4]: (2, 1) 入力は矢印キーの上下あるいは Ctrl+P/N で履歴を行き来できる。Ctrl+R でインクリメンタルサーチできる。 Tab 補完Tab キーで入力を補完させることができる。以下の例で、<Tab> は Tab キーを押しているところである。 In [1]: abc = 1 In [2]: a<Tab> %alias %autoindent abs any assert %alias_magic %automagic all apply %autocall abc and as In [2]: ab<Tab> abc abs In [2]: abc Out[2]: 1 Notebook でも補完は機能する。 オブジェクトの情報の表示"?" でオブジェクトの情報を表示させることができる。 In [1]: abc = 1 In [2]: abc? Type: int String form: 1 Docstring: int(x=0) -> int or long int(x, base=10) -> int or long ... 関数でもよい。
In [1]: def f():
...: print('test')
...:
In [2]: f?
Signature: f()
Docstring: <no docstring>
File: ~/<ipython-input-1-9bd8e6af1c0a>
Type: function
"??" で (可能であれば) ソースコードも表示される。
In [3]: f??
Signature: f()
Source:
def f():
print('test')
File: ~/<ipython-input-1-9bd8e6af1c0a>
Type: function
アスタリスク "*" も使える。 In [1]: import sys In [2]: sys.*? sys.__displayhook__ sys.__doc__ sys.__excepthook__ ... In [3]: sys.ex*? sys.exc_clear sys.exc_info sys.exc_type sys.excepthook sys.exec_prefix sys.executable sys.exit sys.exitfunc マジックコマンドIPython では IPython 特有の「マジックコマンド」が使える。マジックコマンドは "%" から始まる。"%" は、名前が他で使われていない限りは省略できる。たとえば、"%run" でスクリプトを実行できる。 In [1]: %run sample.py "run sample.py" でも実行できるが、"run" という変数が定義されていたりしたらエラーになる。 "%run" で実行後、スクリプト内の変数などにアクセスできる。ただし、コマンドラインの変数にスクリプトからアクセスすることはできない。もしそうしたい場合は、"-i" オプションを付ける。 %run -i sample.py シェルとの連携"!コマンド" でシェルのコマンドを実行させることができる。 !ls コマンドの結果を変数に代入することも可能。 a = !ls "!コマンド $x" のように変数名に "$" を付けることで Python の変数をコマンドに渡すことができる。 シェルに関連したマジックコマンドがいくつか用意されている。
マジックコマンドの "%" は多くの場合省略できるし、パスについても補完が効くので、IPython をシェルの代りに使うこともできなくはない。 デバッグ"%run" で "-d" オプションを付けてスクリプトを実行すると、デバッグモード (ipdb) で起動する。以下のようなコマンドが使える。
スクリプトが例外で止まってしまったところからデバッグモードに入るには、"%debug" を実行する。"%pdb" を実行すると、止まったときに自動的にデバッグモードに入るかどうかを On/Off で切り替えられる。 プロファイルの作成IPython の設定はプロファイルで行う。プロファイルの作成は次のようにする。 $ ipython profile create "~/.ipython/profile_default" に "ipython_config.py" と "ipython_kernel_config.py" が作成される。 ipython_config.py で事前にコードを実行させることができる。 ipython_config.py
c.InteractiveShellApp.exec_lines = [
'import numpy as np'
]
プロファイリング"%timeit" で、コマンドの実行時間を timeit モジュールにより計測することができる。 "%prun" あるいは "%run" の "-p" オプションで、それぞれコマンドおよびスクリプトの cProfile モジュールによるプロファイリングを実行できる。 参考 | |
| PENGUINITIS | |