pythonのインタラクティブモードで補完を有効にする方法

エキスパートPythonプログラミングで知ったのでメモしておく。
まあ、IPythonを使うことがほとんどだと思うけど。

コードの準備

以下のコードを準備。

# -*- coding: utf-8 -*-

import readline
import rlcompleter
import atexit
import os

# tab complete
readline.parse_and_bind('tab: complete')

# history
histfile = os.path.join(os.environ['HOME'], '.pythonhistory')
try:
    readline.read_history_file(histfile)
except IOError, e:
    pass

atexit.register(readline.write_history_file, histfile)
del os, histfile, readline, rlcompleter, atexit

上記コードが準備できたら、このコードをどっかにファイル名 .pythonstart で保存する。
ここでは説明のため、~/.pythonstartup に置くものとする。

パスの設定

.pythonstartup ファイルをどっかに置いただけでは、Pythonインタラクティブモードで補完が有効にならない。このファイルへのパスを通すために環境変数を設定する必要がある。
環境変数の設定は、.bashrc や .bash_profile などに記載する。記載例は以下のとおり。

export PYTHONSTARTUP=~/.pythonstartup

ここの例では、~/.pythonstartup にパスが通されている。

実行結果

shell を再起動させて実際に動かしてみるとこんな感じになる。

macbook-2:~ kazupon$ python
Python 2.5.5 (r255:77872, Aug  9 2010, 04:39:07) 
[GCC 4.2.1 (Apple Inc. build 5659)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> datetime.
datetime.MAXYEAR           datetime.__dict__          datetime.__hash__          datetime.__reduce__        datetime.__str__           datetime.time
datetime.MINYEAR           datetime.__doc__           datetime.__init__          datetime.__reduce_ex__     datetime.date              datetime.timedelta
datetime.__class__         datetime.__file__          datetime.__name__          datetime.__repr__          datetime.datetime          datetime.tzinfo
datetime.__delattr__       datetime.__getattribute__  datetime.__new__           datetime.__setattr__       datetime.datetime_CAPI     

はい以上。便利♪