路傍のプログラマ

只のプログラマが綴る愚痴と備忘録

64ビット化計画、再び。 #5 CPython

2009-05-08 14:19:32 | プログラミング
「Pythonなら、64ビット版のインストーラーを配布してるよ」と言われそうですが、

ちょっと疑問がわいたので、ソースからコンパイルしてみます。コンパイラは配布されているCPythonと同じもの、VC 9.0 (2008)を使います。

いろいろ試したのですが、結果的にうまくいった方法は以下の通り。

(1) ソース(Python-2.6.2.tar.bz2)をダウンロードして展開したディレクトリを
c:¥Python-2.6.2とします。

(2) コマンドラインから以下を実行すると、デバッグ版のpython26_d.dllをビルドできます。
pushd c:¥Python-2.6.2
Tools¥buildbot¥build-amd64.bat

途中、コンパイラがsqlite3が無いとか、db何たらが無いとかエラーを出しますが、

とりあえず、c:¥Python-2.6.2¥amd64に*.lib, *.dll, *.pyd等が生成されるようです。

(3) チェックのため、C言語からpython26_d.dllを呼び出すソースをビルドしてみます。

VS 2008でプロジェクトを作り、ドキュメントからパクった以下のソースをペースト。

#include <Python.h>

int
main(int argc, char *argv[])
{
Py_Initialize();
PyRun_SimpleString("from time import time,ctime¥n"
"print 'Today is',ctime(time())n");
Py_Finalize();
return 0;
}

構成マネージャで、64ビット版(x64)の構成を作ります。
インクルードディレクトリに"c:¥Python-2.6.2¥include"を追加。
ライブラリディレクトリに"c:¥Python-2.6.2¥PCbuild¥amd64"を追加。

# 本来はこれで良いはずなのですが、このままだとコンパイラに「pyconfig.hが無い」と怒られてビルドできません。

(4) 通常のCPythonの配布ファイルに含まれているpyconfig.hを"c:¥Python-2.6.2¥include"にコピーします。

ビルドすると、ちゃんと動くexeができました(実行時にpython26_d.dllにパスを通しておくのをお忘れなく)。

めでたしめでたし。

ちなみに、Pyconfig.hを読んでみると、コメントに「これは自動的に生成されるファイルではない」と書いてあり、本来はインストール作業の一貫として手作業で作ることが想定されているようです。

中身は、プラットフォーム別のマクロ定義のようでした。本来はきちっと調べるべきなのかもしれませんが、今回は動くところまで確認できたので、とりあえずよしとします。

(2009/05/20 追記)
一部ファイルのパスを間違えて記述していたのを修正。

最新の画像もっと見る