64bit版 Windows で 64bit版 Python の常用に挑戦してみた
Python は早くから64bit版 Windows に対応した64bitの Python (amd64だけでなくia64も)を 配布してきましたが、一般的に使われる多くの拡張モジュールが64bit版のバイナリパッケージを 配布していないこともあり、ほとんど普及してきませんでした。
私はamd64版 Windowsを自宅で使っているのですが、 Python 2.5 まではやはり32bit版を 利用してきました。しかし、amd64版があるのに32bit版を使うのは、こう、なんというか、 負けた気分になるので、いつかはamd64版を使いたいと思っていました。
最近Windowsをクリーンインストールすることになり、 Python 2.6 を amd64でいれるか、それとも 今まで通りx86で入れるのか考えたのですが、win32 と wxPython という有名な拡張モジュールが amd64版を配布しはじめている事を知り、とうとうamd64版の Pythonを使い始めることにしました。
環境をそろえていく上でいくつか問題もあったので、環境構築手順を記録しておきます。
Pythonのインストール
Pythonの公式サイト から python-2.6.amd64.msi を
ダウンロードしてインストールします。
デフォルトでは C:\Python にインストールされるのですが、私の趣味で C:\usr\Python
にインストールしました。
インストールが完了したら、 C:\usr\Python
と C:\usr\Python\Scripts
を環境変数 PATH に設定しておきます。
setuptoolsのインストール
setuptools は ez_setup.py を使ってインストールするのが常套手段なのですが、同梱されているランチャの 実行ファイルが32bitでコンパイルされており、64bitコンソール上で利用するとエラーになって しまいます。 そこで、パッケージをダウンロードして、ランチャを64bitでコンパイルしなおした上でインストール することにします。
まず、amd64のバイナリを作成できる環境を用意します。私は Microsoft Windows SDK v6.1 を利用しました。コマンドプロンプトから、
"C:\Program Files\Microsoft SDKs\Windows\v6.1\Bin\SetEnv.Cmd" /Release
を実行して、clやlinkが使えるようにしておきます。
次に、Python Package Index から、 setuptools の tarballをダウンロードします。
先ほどのコマンドプロンプトでtarballを展開してできたディレクトリに入り、 launcher.c をコンパイルします。Windows SDK v6.1 でコンパイルするときには、 launcher.c に一行includeを追加してやる必要がありました。
#include "windows.h" +#include "process.h"
用意ができたら、ランチャをコンパイルします。gui版(実行してもプロンプトが表示されない) とcli版(プロンプトの中で実行される)の二種類を作成します。コンパイルオプションに注意してください。
C:\setuptools-0.6c9>cl /Ox /DGUI=0 /Fesetuptools\\cli.exe /MT launcher.c /link /SUBSYSTEM:CONSOLE /ENTRY:WinMainCRTStartup Microsoft (R) C/C++ Optimizing Compiler Version 15.00.21022.08 for x64 Copyright (C) Microsoft Corporation. All rights reserved. launcher.c Microsoft (R) Incremental Linker Version 9.00.21022.08 Copyright (C) Microsoft Corporation. All rights reserved. /out:setuptools\\cli.exe /SUBSYSTEM:CONSOLE /ENTRY:WinMainCRTStartup launcher.obj C:\setuptools-0.6c9>cl /Ox /DGUI=1 /Fesetuptools\\gui.exe /MT launcher.c /link /SUBSYSTEM:WINDOWS /ENTRY:WinMainCRTStartup Microsoft (R) C/C++ Optimizing Compiler Version 15.00.21022.08 for x64 Copyright (C) Microsoft Corporation. All rights reserved. launcher.c Microsoft (R) Incremental Linker Version 9.00.21022.08 Copyright (C) Microsoft Corporation. All rights reserved. /out:setuptools\\gui.exe /SUBSYSTEM:WINDOWS /ENTRY:WinMainCRTStartup launcher.obj
これで、64bit版のランチャがビルドできたので、setuptools をインストールできます。
C:\setuptools-0.6c9>python setup.py install
IPythonのインストール
IPythonは、通常通り easy_install ipython でインストールできます。 ただし、これだけだと pyreadline がインストールされず、ipythonの力が 半減してしまいます。 pyreadline は普通にeasy_installするだけでは インストールに失敗したので、 http://ipython.scipy.org/dist/ から pyreadline-1.5.tar.gz をダウンロードしてきて、
>easy_install pyreadline-1.5.tar.gz
としてインストールしました。これで、ipythonのセットアップは完了です。
Linuxでは、bash等のシェルの代わりにIPythonを使う気にはならないのですが、 WindowsのコマンドプロンプトのシェルはLinux系のシェルよりも機能が少ないので、 単純なファイル操作だけでもIPythonが便利だったりします。
pywin32のインストール
pywin32はPythonからWindows APIを利用するための拡張ライブラリです。
これを使うと、たとえば win32file.CreateHardLink
をつかって
ハードリンクを作れるようになります。
sourceforge のダウロードページ から、 pywin32-{バージョン}.win-amd64-py2.6.exe をダウンロードして、インストールします。
拡張モジュールのコンパイル環境の設定
拡張モジュールが入ったソースパッケージを easy_install でインストールするには、 コンパイラの設定をしておく必要があります。32bit版では、Linux派に易しいMinGWを 使っていたのですが、amd64のためにWindows SDKを使う方法を紹介しておきます。
本来ならば、
>set DISTUTILS_USE_SDK=1 >"c:\Program Files\Microsoft SDKs\Windows\v6.1\Bin\SetEnv.Cmd" /Release /x64
とすることで、distutilsはコンパイラを自力で見つけようとせずに、環境変数をそのまま 使うようになります。
しかし、Python-2.6のdistutilsにはバグ (issue3741) があって、エラーになってしまいます。 Pythonをインストールしたディレクトリの下の、Lib/distutils/msvc9compiler.py を開いて、 316行目のtypoを修正します。
- self.__path = [] + self.__paths = []
これで、上記の方法でWindows SDKのコンパイラを利用できるようになりました。 32bit Windowsで使えるたいていの拡張ライブラリは、この設定をしてからソースパッケージを インストールすることで利用可能になります。