対話モードで日本語入力

LeopardPythonはじめたら、対話モードで日本語入力できなかった。
次の記事を参考に対応、自分用にメモ。

以下、pythonコマンド実行時にGNUのreadlineで作ったreadline.soを優先させる設定

$ mkdir ~/tmp
$ cd ~/tmp
$ curl -O "http://www.python.org/ftp/python/2.5.1/Python-2.5.1.tgz"
$ curl -O "ftp://ftp.cwru.edu/pub/bash/readline-5.2.tar.gz"
$ curl -O "ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches/readline52-00[1-7]"
$ tar xvf Python-2.5.1.tgz
$ cp -p Python-2.5.1/Modules/readline.c .
$ gzcat readline-5.2.tar.gz | tar xvf -
$ cd readline-5.2
$ patch -b < ~/tmp/readline52-001
$ patch -b < ~/tmp/readline52-002
$ patch -b < ~/tmp/readline52-003
$ patch -b < ~/tmp/readline52-004
$ patch -b < ~/tmp/readline52-005
$ patch -b < ~/tmp/readline52-006
$ patch -b < ~/tmp/readline52-007
$ cd ..
$ mv readline-5.2 readline
$ cd readline
$ ./configure --disable-static
$ echo '#define NEED_EXTERN_PC 1' >> config.h
$ make
...省略
i686-apple-darwin9-gcc-4.0.1: -compatibility_version only allowed with -dynamiclib
make[1]: *** [libreadline.5.2.dylib] Error 1
make: [shared] Error 2 (ignored)
$ cd shlib
$ mv *.so ../..
$ cd ../..
$ vi setup.py
from distutils.core import setup, Extension

READLINE_OBJS = [
    "bind.so", "callback.so", "compat.so", "complete.so", "display.so",
    "funmap.so", "histexpand.so", "histfile.so", "history.so",
    "histsearch.so", "input.so", "isearch.so", "keymaps.so", "kill.so",
    "macro.so", "mbutil.so", "misc.so", "nls.so", "parens.so", "readline.so",
    "rltty.so", "search.so", "shell.so", "signals.so", "terminal.so",
    "text.so", "tilde.so", "undo.so", "util.so", "vi_mode.so", "xmalloc.so",
    "-ltermcap"
]

setup(name="readline",
      ext_modules=[
          Extension(name="readline",
          sources=["readline.c"],
          extra_compile_args=["-I."],
          extra_link_args=READLINE_OBJS)])
$ python setup.py build
...省略
ld: warning in bind.so, file is not of required architecture
...以下、PPC 用に *.so が作られていないと警告される
$ cp build/lib.macosx-10.5-i386-2.5/readline.so /Library/Python/2.5/site-packages/
$ cd /Library/Python/2.5/site-packages/
$ sudo vi sitecustomize.py
import sys
sys.setdefaultencoding('utf-8')

import imp
imp.load_dynamic('readline', '/Library/Python/2.5/site-packages/readline.so')