2008年12月24日水曜日

[GAE] PILをjpegとzlibオプション付きでコンパイルする方法。(VC++ 2008 Express版)

VC2005でも使えるかも。

Python系って、今配布されている2008とかだとコンパイルしてくれない。
Visual Studio 2003じゃないと許せないから2003使ってね、みたいなメッセージが出る。…なんて心が狭(ry


で、無理やりコンパイルする方法があったので備忘録。2003は無料じゃ手に入らないし。

こちらの記事で、コンパイル環境を作ります。まぁインストールですが。
[nmake.exe&cl.exe]無料で作るコマンドラインからのコンパイル環境(Visual Studio Express 2008版)


で、3つのファイルをダウンロードしてきます。
下のリンクはそれぞれ今(2008年12月)の最新版です。

1.PIL本体
Python Imaging Libraryから、PIL最新版の「Source Kit」をダウンロードします。
1.1.6(クリックでダウンロード)です。

2.Jpeg Lib(Jpegサポート用)
ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz(クリックでダウンロード)

3.zlib(PNGサポート用)
http://www.zlib.net/zlib-1.2.3.tar.gz(クリックでダウンロード)


ダウンロードしたら、全部解凍します。
それぞれフォルダが作成されますので、JpegとzlibのフォルダをどちらもImagingのフォルダに放り込みます。

+Imaging-1.1.6
 -jpeg-6b
 -zlib-1.2.3


こんな感覚です。

次に、setup.pyがはじいてしまうVC++2008を環境設定とレジストリで回避します。
てかそんなフラグ見てるんだ。

環境変数の設定。
下の変数を作って、どちらも「1」を設定します。
DISTUTILS_USE_SDK
MSSDK


次にレジストリエディタ。
「ファイル名を指定して実行」で「regedit」
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework
をたどり、「新規」→「文字列値」で、
sdkInstallRootv1.1
を作っておきます。値は入力しなくてOKです。


さて、コンパイルします。


Imaging-1.1.6の中にある設定を下のように変更します。
JPEG_ROOT = 'jpeg-6b'
ZLIB_ROOT = 'zlib-1.2.3'

最初はどちらもNoneになってるはず。

カレントフォルダをJpeg-6bにします。
で、「jconfig.vc」ファイルのファイル名を「jconfig.h」に変更してから、以下のコマンドでコンパイル。
nmake -f makefile.vc


だーっとログが流れます。警告も多いですがFatal Errorってのが出なければOKです。



次。カレントフォルダをzlib-1.2.3にします。
以下のコマンドでコンパイル。
nmake -f win32\Makefile.msc


Jpegほどじゃないですがログが流れますので終わるのを待ちましょう。



最後。Imaging Library。
カレントフォルダをImaging-1.1.6にします。
以下のコマンドでコンパイル。
python setup.py build


ログの最後の方に、こんなメッセージが出てればOK。



最後に、
python selftest.py

この処理を実行して、
57 tests passed.

と表示されれば完了です。


出典
http://d.hatena.ne.jp/moriyoshi/20070518/1179490110
http://www.freia.jp/taka/blog/392