IPython メモ

2016年3月27日

はじめに

IPython についてのメモ。

環境

  • Mac OS X 10.9
  • Anaconda for OS X (Python 2.7)

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 の変数をコマンドに渡すことができる。

シェルに関連したマジックコマンドがいくつか用意されている。

  • %pwd
  • %ls
  • %cd
  • %env

マジックコマンドの "%" は多くの場合省略できるし、パスについても補完が効くので、IPython をシェルの代りに使うこともできなくはない。

デバッグ

"%run" で "-d" オプションを付けてスクリプトを実行すると、デバッグモード (ipdb) で起動する。以下のようなコマンドが使える。

  • s : ステップイン実行
  • n : 次の行を実行 (関数に入らない)
  • c : 続きを実行
  • b <行番号> : 現在のファイルの行番号にブレークポイントの設定
  • b <ファイル名>:<行番号> : 指定したファイルの行番号にブレークポイントを設定
  • p <変数> : 変数の値の表示
  • l : リストの表示
  • w : スタックトレースの表示
  • q : デバッグ終了

スクリプトが例外で止まってしまったところからデバッグモードに入るには、"%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 モジュールによるプロファイリングを実行できる。

参考