Apple によるロケール周りの変更点を Python 2.5.1 にも適用する

2007/09/09 11:49am

Python: Mac OS X での locale.getpreferredencoding() では、Mac OS X に Python 2.5.1 をソースコードからインストールした場合に発生する、ロケール周りの問題点について書いた。

要約すると、

という内容だった。

しかし、しばらくして「っき」さんよりコメントをいただいた

上記のlocale.getpreferredencoding()の返り値ですが、10.4.9に含まれているOS標準のPython 2.3.5では、デフォルトがUS-ASCIIになっていて、LANG環境変数も見てくれます。

これは、Appleがパッケージングの際に、

http://www.opensource.apple.com/darwinsource/10.4.9.x86/python-16.1.3/

以下に含まれているパッチを適用して、ロケール周りのdefined(APPLE)や ‘darwin’ を無効にしているからです。

たしかに、前回の記事では Mac OS X に標準でバンドルされている Python にまで考えが及んでいなかった。「っき」さんの指摘通り、互換性のことも考慮すると、Apple のパッケージングを見習うのがよさそうだ。

というわけで、Apple のパッチを適用した Python 2.5.1 のパッチファイルをアップしておく。以降は、このパッチファイルを作成するまでの詳細である。

Mac OS X に標準でパッケージングされている Python

Apple Developer ConnectionOpen Source ページでは Mac OS X のベースとなっている Darwin のソースコードが公開されている。現時点での最新版は Mac OS X 10.4.9 のものなので、今回のパッチはこれを基にした。

上記ページからダウンロードできる python-16.1.3.tar.gz には Mac OS X にバンドルされている Python に適用されたパッチが含まれているので、このうち、ロケール周りに関係あるものを Python 2.5.1 のソースコードに適用すればよさそうだ。

Apple のパッチを Python 2.5.1 に適用する

まずは、Python 2.5.1 のソースコードと Apple のパッチ (python-16.1.3.tar.gz) を同じディレクトリにダウンロードして展開する。

% curl -LO http://www.python.org/ftp/python/2.5.1/Python-2.5.1.tgz
% curl -LO http://www.opensource.apple.com/darwinsource/tarballs/other/python-16.1.3.tar.gz
% tar xvzf Python-2.5.1.tgz
% tar xvzf python-16.1.3.tar.gz

以下のようなシェルスクリプトでパッチを適用した。

PROJECT=Python-2.5.1
FIX=python-16.1.3/fix
echo ed - ${PROJECT}/Lib/locale.py \< ${FIX}/locale.py.ed && \
ed - ${PROJECT}/Lib/locale.py < ${FIX}/locale.py.ed && \
echo ed - ${PROJECT}/Modules/_localemodule.c \< ${FIX}/_localemodule.c.ed && \
ed - ${PROJECT}/Modules/_localemodule.c < ${FIX}/_localemodule.c.ed

要するに、

というふたつのパッチファイルを適用したわけだ。

その diff をとったものが上記のパッチファイルとなる。