Windows版のPILをビルドするには、いくつかの外部ライブラリを用意する必要が有りますが、各外部ライブラリのWindows向け静的リンク版は提供されていないことが多いので、これらも自分でビルドします。また、PILは最終的にPythonからロードされるため、コンパイラは利用するPythonをビルドしたものと同じにしておく必要があります。
今回コンパイルの対象としたPILは以下のバージョンです。
PIL: | 1.1.7 for Python 2.4 |
---|---|
PIL: | 1.1.7 for Python 2.5 |
PIL: | 1.1.7 for Python 2.6 |
PIL: | 1.1.7 for Python 2.7 |
Python for Windows の各バージョンと対応するコンパイラのバージョンは以下の通りです。
Python-2.4(32bit): | VisualStudio 7.1 (1310) |
---|---|
Python-2.5(32bit): | VisualStudio 7.1 (1310) |
Python-2.6(32bit): | VisualStudio 2008 (1500) |
Python-2.7(32bit): | VisualStudio 2008 (1500) |
VisualStudio 7.1 は製品版を使用するか、VisualStudio 2003 Toolkit とxxxを用いた無償環境を用意(手順: xxx)する必要があります。VisualStudio 2008 はVisualC++ 2008 Express版(無償)を用意します。
外部ライブラリとして以下を用意します。リンクに src と書いているものはライブラリが提供されていないため自分でビルドして.libを作る必要があります。
freetype2: | 2.4.6 src (VC7, VC2008 両用) |
---|---|
jpeg6b: | 6b 27-Mar-1998 lib (VC7用), lib (VC2008用) |
LittleCMS: | 1.19 `src`_ |
tcl: | 8.5.10 `src`_ |
tk: | 8.5.10 `src`_ |
zlib: | 1.2.4 `vc7lib`_, `vc2008lib`_ |
ここでは各種組み合わせを代表して、Python-2.7(32bit)向けのPILビルド手順を記載します。なお、ビルドを行った環境は Windows 7 (64bit) ですが、対象となるPythonは32bit版です。
ft246.zipを展開して、 buildswin32vc2008freetype.sln をVC2008で開きます。構成 LIB Release, プラットフォーム Win32 を選択してビルドすればライブラリは完成です。
なお、VC2008でビルドしたものをVC7用にもそのまま使えました。
作成したlibは objswin32vc2008freetype246.lib として生成されるので、このファイルを freetype.lib にリネームしておきます。
これを C:Libfreetype 以下に lib と include を配置して置いてください:
C:\Lib\freetype +-- lib\freetype.lib +-- include\*.h
前述のリンクから jpeg6-vnet.zip または jpeg6b-vs2008.zip を入手すればビルド済みライブラリが手に入ります。
これを展開して C:Libjpeg6 以下に lib と include を配置して置いてください:
C:\Lib\jpeg6 +-- lib\libjpeg.lib +-- include\*.h
"Little CMSは1系と2系が存在していますが、PILで必要とされているのは1系のようです。"
- Visual Studio 2008 コマンド プロンプト 起動
- cd C:libtcl8.5.10win
- nmake -f makefile.vc
- cd C:libtk8.5.10win
- set TCLLIB=C:libtcl8.5.10
- nmake -f makefile.vc
setup.cfg 作成&書き換え:
[build_ext] library_dirs = C:\lib\zlib124lib;C:\lib\jpeg6b-vs2008\lib;C:\lib\freetype-2.4.6\lib;C:\lib\lcms-1.19\Lib\MS;C:\lib\tcl8.5.10\win\Release_VC9;C:\lib\tk8.5.10\win\Release_VC9 include_dirs = C:\lib\zlib124lib;C:\lib\jpeg6b-vs2008\include;C:\lib\freetype-2.4.6\include;C:\lib\lcms-1.19\include;C:\lib\tcl8.5.10\generic;C:\lib\tk8.5.10\generic;C:\lib\tk8.5.10\xlib
ビルド:
python-2.7 -S setup.py build_ext -i build
動作確認:
python-2.7 -S selftest
Windowsインストーラ作成:
python-2.7 -S setup.py bdist_wininst
python setup.py build_ext -i
インプレイスでビルドする -> テスト可能となる -> その状態でbdist_wininst / bdist_egg等するとはまる
selftest内のモジュール検索パスを変更しないとbuildでsupportと言ってるのにselftestではnot-supportになってしまう