Pythonのインタラクティブモードを拡張してみた

Pythonのインタラクティブモードが拡張できると聞いてやってみたメモ。
作業環境はMacOSX。

インタラクティブモードとは?

pythonコマンドを実行したときに表示される、
インタラクティブにコマンドを実行できるモードのこと。(↓これ)

$ python  
Python 2.5.5 (r255:77872, Sep 28 2010, 00:18:50)   
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin  
Type "help", "copyright", "credits" or "license" for more information.  
>>> 1+2  
3  
>>> 3+4  
7  
>>>   

↑これに、タブによるコマンド補完とコマンドヒストリー機能をつけてみる。

カスタマイズ

まずPYTHONSTARTUP環境変数に設定する用のファイルを作成する。
PYTHONSTARTUP環境変数に設定されたファイルは、インタラクティブモードの起動時に実行される。
今回は.pythonstartupというファイルを作り、ホームディレクトリ配下に設置した。

$ vi ~/.pythonstartup  
# -*- encoding: utf-8 -*-  
# Pythonスタートアップ  
import readline  
import rlcompleter  
import atexit  
import os  
# タブ補完  
readline.parse_and_bind('tab: complete')  
# ヒストリーファイル  
histfile = os.path.join(os.environ['HOME'], '.pythonhistory')  
try:  
    readline.read_history_file(histfile)  
except IOError:  
    pass  
atexit.register(readline.write_history_file, histfile)  
del os, histfile, readline, rlcompleter, atexit  

このコードは、エキスパートPythonプログラミングで紹介されていた例をコピペしたもの。
この本で提供されてるスクリプト(洋書版)はパッケージ化されていて、pbp.scriptsからダウンロードできる。

続いて、PYTHONSTARTUP環境変数に.pythonstartupを設定する。

$ vi ~/.bash_profile  
export PYTHONSTARTUP=~/.pythonstartup  

最後にsourceコマンドを実行する。

$ source ~/.bash_profile  

以上で設定完了。
インタラクティブモードでタブによるコマンド補完とコマンドヒストリー機能が有効になる。

$ python  
Python 2.5.5 (r255:77872, Sep 28 2010, 00:18:50)   
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin  
Type "help", "copyright", "credits" or "license" for more information.  
>>> import sys  
>>> sys.s[tab]  
sys.setcheckinterval   sys.setprofile         sys.settrace           sys.stdin              sys.subversion  
sys.setdlopenflags     sys.setrecursionlimit  sys.stderr             sys.stdout               

IPython

上記のとは別にIPythonという拡張インタラクティブモードを提供するプロジェクトがある。

らしい。

IPythonのビルドが2時間たっても終わらないのでまたいつか。