物置き

Python 2.5.2のdistutilsで作成したモジュールを、Python2.6で使う

Python上でC/migemoを利用するためのラッパーライブラリであるpymigemo
というのをインストールしようとしたところ、ビルド時にエラーが発生した。


http://diary.atzm.org/20051007.html#p02

こちらのエントリに書かれている内容に従い、ソースを修正したが、
それでもビルドに失敗する。で、さらにしらべてみたところ


http://anond.hatelabo.jp/20080321230641


上記エントリによると、Pythonのdistutilsを使って、モジュールをビルドする時には、
Pythonのバージョンに対応したVisualStudioが必要ということが判明。
Python2.5.2の場合はVS2003、Python2.6の場合はVS2008が必要になるとのこと。


が、手元の環境ではPython2.6を使っているがVS2008がない。VS2003はある。
そこで、Python2.5.2の方でsetup.pyを実行して、
できあがったモジュール(migemo.pyd)を、
バイナリエディタでPython25.dllからPython26.dllに依存するように
書き換えることによって、問題を回避することができた。

モジュールのビルド

# Python2.5.2でビルド
C:\Python25\python.exe setup.py build
# Python2.5.2環境にインストール
C:\Python25\python.exe setup.py install

上記のコマンドを実行すると、
C:\Python25\lib\site-packages\migemo.pyd が作成される。
このモジュールは、python25.dllに依存しているので、
Python2.6上では利用することができない。

依存関係の修正

これをバイナリエディタで開き、「python25.dll」で検索すると、
一カ所だけヒットするので、ここを「python26.dll」に書き換える。
あとは書き換え後のモジュールを、C:\Python26\lib\site-packages にコピー。
これでPython2.6上で利用できるようになる。


モジュールをimportしてみたが、特に落ちたりもしなかった。めでたしめでたし。