WindowsでPythonのライブラリをコンパイルする方法

Windowsmisakaをインストールしようとしたらエラーが発生した。

$ pip install misaka

どうやらC言語のソースをコンパイルできない模様。

調べてみたらVisual Studio 2008をインストールすればよいようだが、今更古いバージョンをインストールする気にはなれず、とりあえず Visual Studio Express 2013 for Windows Desktop をインストールするも解消せず。

調べてみたところ以下のブログを発見。 街角のリブロガー: pythonでvcvarsall.batエラーが出る。

まずは、 from distutils.msvc9compiler import * get_build_version() これで現在のバージョンを調べる。 10.0なら HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\VisualStudio\10.0\Setup\VC\ProductDir ここに文字列で C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC を入れて、 find_vcvarsall()を実行してみて、 ちゃんと戻り値が得られている事をチェックする。 これで完了。

$ python -i
Python 3.3.3 (v3.3.3:c3896275c0f6, Nov 18 2013, 21:19:30) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from distutils.msvc9compiler import *
>>> get_build_version()
10.0
>>> get_platform()
'win-amd64'

おそらくpythonコンパイルしたときと同じコンパイラを使用しようとするが、存在しないのでエラーになるのだと思う。そこで、無理矢理Visual Studio 2013のコンパイラを使用するように設定を変更すると、find_vcvarall()メソッドが通り、コンパイルもできるようになった。

$ python -i
Python 3.3.3 (v3.3.3:c3896275c0f6, Nov 18 2013, 21:19:30) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from distutils.msvc9compiler import *
>>> find_vcvarsall(get_build_version())
'C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\vcvarsall.bat'

変更したのは以下の2カ所

レジストリの編集

レジストリエディタで 以下のキーを作成し

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\Setup\VC

文字列の値を次のように設定

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC

vcvarsall.batの編集

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin

を確認したところ x86_amd64ディレクトリが存在したので

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat

を編集し

if /i %1 == amd64     goto amd64

を次のように書き換えた

if /i %1 == amd64     goto x86_amd64

参考リンク