pythonインタプリタでのメソッド名の補完

irbでは出来る(実際やってみてすごく便利になった)ので、pythonにもあるはずだっ!と思って探したらあった。これってpython使いにはもしや常識なのかな?せっかくなので作業メモ。

前提

pythonの環境はdreamhostでpython2.5とdjangoを使うのエントリを書いたときのもの。

(無かったら)GNU readLineのインストール

GNU readLineが必要らしい。普通は入ってるはず。というか

% dpkg -l | grep readline
ii  libreadline-ru 1.8.5-4        Readline interface for Ruby 1.8
ii  libreadline4   4.3-11         GNU readline and history libraries, run-time
ii  libreadline5   5.0-10         GNU readline and history libraries, run-time

だし、普通にある。で、dreamhostに最初から入ってるpython2.4.1で

>>> import readline

して問題なかった。だが残念ながら自分のホームディレクトリ配下にインストールしたpython2.5だとエラーになった。というわけでホームディレクトリ配下にreadlineをインスールしてみた。(パッチもいくつか出てたので適用)

% wget ftp://ftp.gnu.org/gnu/readline/readline-5.2.tar.gz
% tar zxf readline-5.2.tar.gz  
% mkdir readline-5.2/patches  
% cd readline-5.2/patches/
% wget -c 'ftp://ftp.gnu.org/gnu/readline/readline-5.2-patches/readline52-*'
% rm *.sig
% cd ../
% foreach f ( patches/readline52-* )
foreach% patch -p0 < $f
foreach% end
% ./configure --prefix=$HOME/root 
% make && make install

pythonのリビルド

% cd ~/src/Python-2.5/ 
% ./configure --prefix=$HOME/root
% make && make install  

で再度

>>> import readline

してみたら問題なくなった。そこで以下の設定を行った。

~/.pythonrc.py

以下のような感じで作成。

import rlcompleter, readline
readline.parse_and_bind('tab: complete')

~/.zshenv

以下を追加

export PYTHONSTARTUP=$HOME/.pythonrc.py

反映

source ~/.zshenv

で、試してみると…

% python
Python 2.5 (r25:51908, Aug 13 2007, 15:47:54) 
[GCC 3.3.5 (Debian 1:3.3.5-13)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> p
pass      pow       print     property  
>>> pr
print     property 

あっさり出来た。でもすごく便利。あとついでにviな人やemacsな人は~/.inputrcも作るさらに幸せになるかもしれない。

~/.inputrc作成

以下のような感じで作成。

# vi スタイルの編集を選択する:
set editing-mode vi

# 一行だけを使って編集する:
set horizontal-scroll-mode on

# ヒストリバッファ編集でアスタリスクを表示:
set mark-modified-lines on

反映

% source ~/.inputrc

で、pythonインタプリタ上でヒストリ使ったり、編集をviと同じ感覚で行えるようになった。(vi全然使いこなせてないけど満足w