21
IPythonをマスターしよう Python東海 Vol.5 株式会社モノスペース 船井 裕 [email protected]

Python東海Vol.5 IPythonをマスターしよう

Embed Size (px)

Citation preview

IPythonをマスターしよう Python東海 Vol.5

株式会社モノスペース

船井 裕[email protected]

IPython?

Pythonの拡張インタラクティブシェル

タブ補完

オブジェクトのイントロスペクション

システムシェルへのアクセス

特殊コマンド などなど

インストール

$ easy_install IPython

$ ipython

Windows or Mac 環境は readline を別途インストールしないとだめかも

基本的な使い方Basic Usage

タブ補完例えば、sys モジュールのメソッド、属性を表示したい

In [1]: import s[TAB] # <- sまでタイプしてTAB モジュール補完候補表示

set setattr slice sorted staticmethod str sum super sys

In [2]: import sys

In [3]: sys.[TAB] # <- sys.までタイプしてTAB補完候補表示

In [4]: sys.__class__

.sys.__class__ sys.__delattr__ ...

イントロスペクション例えば、re モジュールについて調べたい

In [1]: import re

In [2]: re? # オブジェクトに関する情報を表示(省略あり)

In [3]: re?? # オブジェクトに関する情報を表示(省略なし)

In [4]: %pdoc re # docstring表示

In [5]: %pdef re.search # re.searchの宣言部表示

In [6]: %psource re.search #re.search メソッドのソースコード表示

In [7]: %pfile re.search #re.search が定義されているファイルのソースコードを表示

マジックコマンドIPythonの独自のコマンド

%[TAB] #マジックコマンドの一覧%alias %autocall %autoindent ...

※automagicがON(デフォルトでON)だと、%を付けなくても実行できる。

In [1]: alias #これで実行できるところでマジックコマンドに定義されてないのに、ls とかが動くのはなぜ?

%alias #シェルコマンドがマップされている[('cat', 'cat'), ('clear', 'clear'), ('less', 'less'), ('mkdir', 'mkdir'), ...]

%alias d date # エイリアスの追加。 dと打つとdateが実行される

シェルアクセスIPythonを終了せずにシェルコマンドを実行したい

In [1]: !cal # cal コマンドが直接シェルに渡されるIn [2]: d = !date # date コマンドの結果を d に代入In [3]: d # <class 'IPython.genutils.SList'> 特殊なリストになるIn [4]: !echo $$PATH # $$で環境変数へのアクセス

キャッシュアウトプットキャッシュ

Out という辞書に格納

_1 == Out[1] == _oh[1]

_, __, ___ ※ 最新3つの履歴

インプットキャッシュIn という辞書に格納

_i1 == In[1]

_i, _ii, _iii ※ 最新3つの履歴

In [1]: print datetime.now()datetime.nowをもう一回実行したい

In [2]: _i1 # これだと文字列が入ってるだけなのでOut[2]: u'print datetime.now()\n'

In [3]: exec _i1 #ひとつ前のを実行なら、 exec _i だけでもオッケー。もしくは、%r でも可。

履歴In [1]: _dh # cd したディレクトリが入った辞書(終了後も保存)

In [2]: _oh # Out の履歴が入った辞書

In [3]: %hist # 実行コマンド履歴(In の履歴)

In [4]: %rep # 直前のOutを次のプロンプトに表示In [0]: spam = ‘python’

In [1]: spam

Out [1]: ‘python’

In [2]: %rep

In [3]: python

%rep に引数を渡すことも出来る。 %rep 1 とか %rep 1-3 5 とか %rep datetime とかも可

しかし、なぜか自分の Leopard python2.5.1 ipython0.91で動かない!Linuxでは動いた。

%rep datetime と文字列を指定した場合は、履歴をたどって最初にその文字列が見つかったOutを使用する

ブックマークよく行くディレクトリをブックマークしておきたい

In [1]: %bookmark home #カレントディレクトリをブックマーク

In [2]: %bookmark -l #ブックマーク一覧

Current bookmarks:

home -> /Users/hfunai

In [3]: cd -b home # home=/Users/hfunai へ移動

In [4]: %bookmark -d home # ブックマークからhomeを削除

ブックマークは、IPythonを終了しても保存される

応用的な使い方Advanced Usage

ディレクトリスタックIn [1]: %pushd # カレントディレクトリをスタックに入れる

Out[0]: ['~']

In [2]: %dirs # ディレクトリスタックを表示

Out[1]: ['~']

In [3]: %cd ~/SourceCodes

In [4]: %pushd # カレントディレクトリをスタックに入れる

Out[3]: ['~/SourceCodes', '~']

In [5]: %cd /usr/lib/python2.5/site-packages/

In [6]: %popd # ディレクトリスタックの[0]へ移動

In [7]: %pwd # '/Users/hfunai/SourceCodes' を表示

ストレージIPython終了後も値を保存しておいて、また使いたい

In [1]: spam = ‘Python Tokai’

In [2]: %store spam

一旦、IPythonを終了

In [1]: spam

Out[1]: 'python tokai' #spamを上書き

In [2]: spam = ‘Python Nagoya’

In [3]: store -r spam # ‘Python Tokai’が復活(もう一度保存するまで前の値が残ってる)

In [4]: store -d spam # ‘Python Tokai’がをストレージから削除

In [5]: store # 引数なしだと一覧表示

マクロ%macro [マクロ名] 1-3 5

In [1]: import os

In [2]: import sys

ln [3]: import re

In [4]: from datetime import datetiem # spellミス!

In [5]: from datetime import datetime

%macro mymacro 1-3 5 # 4は飛ばす

In [6]: mymacro #マクロを実行

マクロはストレージに保存しておくと便利

ログログをファイルに保存する

%logstartIn [1]: import os

In [2]: import sys

In [3]: import re

%logstop # %logoffで一時的に停止、%logonで再開IPythonを抜けて、シェルで実行

$ ipython -logplay ipython_log.pyログファイルの内容を実行してから、IPythonシェルが開始する。

ソースコード編集In [1]: %cpaste #クリップボードにあるソースをペーストしたいとき

In [2]: %edit #エディタを開いて編集(設定ファイルでエディタを指定)

In [3]: %edit 1-10 #1-10のInをエディタで

In [4]: %save 1-10 #1-10のInをファイルへ保存

簡易バージョン管理%editごとに一時ファイルが作成されるのを利用

In [5]: %edit _i2 # In [2] の内容を編集

In [6]: %edit _i3 # In [3] の内容を編集

クラスとか関数を定義したいときは、%editで書くと、便利。export EDITOR=vimしておきましょう。

簡易バージョン管理は別に使わないよなあ。

doctestへの対応起動オプションで対応

$ ipython -cl # クラシックモード。プロンプトを >>> にする。

※ただし、インプットキャッシュとか一部の機能が使えなくなる。

起動中に一時的に変更

%doctest_mode # プロンプトが >>> になる

%hist -tn #ヒストリを行番号表示なしで

%hist -tnの内容を%doctest_modeにしてからコピペ

%doctest_mode を再実行すると通常モードに戻る

その他のコマンド%rehash # $PATHを見てコマンドすべてを%aliasに入れる

%rehashx # rehashと一緒だけど、exectableかチェックする

%who # 名前空間を表示 %whos %who_ls とか

%reset # 名前空間のリセット 変数とか全部消える

%clear # Input,Outputなどの履歴を消去

%run # IPython上でPythonスクリプトファイルを実行する

%timeit # ベンチマーク的なもの

%pycat # Pythonファイルをソースコードハイライトして表示

%bg # 別スレッドをたててバックグラウンドでスクリプトを実行

%quickref # IPythonチートシート

設定ファイル起動後の挙動を変更する~/.ipython/ipy_user_conf.py

他にもrcファイルがあるけど、 このファイルは起動時に必ず読み込まれるので、とりあえずはこちらを編集。ただ、このファイルとrcファイルとは記述が異なる。こっちはpythonスクリプト。

プロファイルプロファイルは、rcファイルを編集。

~/.ipython/の中にipythonrc-[プロファイル名]

というファイルを作成して、起動オプションでプロファイルを指定する。

$ ipython -p [プロファイル名]常に使用したい設定はipy_user_conf.pyに書いて、場合によって変えたい設定はrcでプロファイルを指定してって感じの使い分けをしたらいいのかな。

参考文献本家のドキュメント

http://ipython.scipy.org/doc/rel-0.9.1/html/