Readlineとロケール問題を回避したPythonをインストールする

なぜ自前ビルドするか

以前からMac標準についているPython2.5.1にはここに書かれているような問題が知られていて、それを回避するためにPython Programming Language – Official Websiteからビルド済みバイナリを落としてきてたのだがまた別にロケール周りに問題があって、実際にMercurialを使っていたときにこれにつまづいた。


ということで、しばらく自前でビルドしていたわけですがよく調べてみたらGNU readlineが有効になっていなかった(汗)
なのでいい機会なのですぐに忘れてしまう自分に対する備忘録もかねて書いてみる。参考にしたところは以下の記事。


Apple によるロケール周りの変更点を Python 2.5.1 にも適用する | METAREAL
Mac の Python をビルドするときに GNU Readline ライブラリを有効にする | METAREAL

手順

まず準備としてGNU readlineはMacPortsを使ってインストール。続いてPython2.6.1もしくは2.5.4(どちらとも現時点で最新)のソースをPython Programming Language – Official Websiteからとってくる。ちなみに自分は両方入れたかったのでどちらも同じ手順でインストールしました。
とってきたファイルを適当なフォルダで伸張する。Safariでダウンロードしてきた場合、~.tar.bz2の後に勝手に.tarをつけることなどがあるが無視して下記のようにすればよい。(gzipの場合はtar xvzfでね)

[bash3.2.48]:[imac-g5]:[~/usr/local/src]
>>$ tar xvjf /Volumes/Sirius/Download/2009-01-11/Python-2.5.4.tar.bz2


そしてApple によるロケール周りの変更点を Python 2.5.1 にも適用する | METAREALを参考にしてOpen Source - Releasesで提供されているPythonの変更箇所をダウンロードする。具体的にはhttp://www.opensource.apple.com/darwinsource/10.5.6/python-30.1.2/fix/にある_localemodule.c.edとlocale.py.edをダウンロードし、Pythonのソースに対し下記のように変更を加える。

[bash3.2.48]:[imac-g5]:[~/usr/local/src/Python-2.5.4]
>>$ ed - Lib/locale.py < ../locale.py.ed 

[bash3.2.48]:[imac-g5]:[~/usr/local/src/Python-2.5.4]
>>$ ed - Modules/_localemodule.c < ../_localemodule.c.ed 


次にGNU Readlineでビルドを行えるようにするために下記のようにconfigureする。

[bash3.2.48]:[imac-g5]:[~/usr/local/src/Python-2.5.4]
>>$ CPPFLAGS=-I/opt/local/include LDFLAGS=-L/opt/local/lib ./configure --enable-framework


後は、make・sudo make install(かsudo make altinstall)すればどちらの問題も回避したPythonが出来上がる。さあ、これで頑張ってお勉強お勉強。