Mac OSX 10.6 SnowLeopard に PIL をインストールする。
はまったのでメモ。
GoogleAppEngine でPILがいると怒られたので、PILをインストールしました。ただ、MBA に XCode4 しか入ってない状態で、PILを入れようとすると下記のような感じでコケます。なお、Xcode3は入れたことありませんので、gcc4.0 は使えません。
環境
- MacBookAir 2st 11inch
- XCode4 Version: 4.0.2 Build: 4A2002a
- gcc version 4.2.1 (Apple Inc. build 5666) (dot 3)
lipo: can't open input file: /var/tmp//ccn4osTA.out (No such file or directory) error: command 'gcc-4.2' failed with exit status 1
ですので下記のように回避。そしてPILの都合により、_images.so は i386/x86_64のユニバーサルバイナリにする。
手順
- libjpeg の i386を作成して/usr/localにインストール
- libjpeg の x86_64を作成して /usr/local/x8664 にインストール
- libjpeg の i386 と x86_64 のライブラリとコマンドを合体してユニバーサルバイナリを作成
- freetype も同様にして、ユニバーサルバイナリを作成
- PIL のインストール
- Pythonのユニバーサルバイナリを、i386とx86_64のみにする
とりあえず、これでPILが使えるようになったはずです。。。あんま自身ないですけど。
libjpeg とか freetype をインストール。
- libjpen version: 8c
- freetype version:2.4.4
- PIL version: 1.1.7
./configure を動かすときに、環境変数で無理やりi386系しかコンパイルしないようにする。一度にユニバーサルバイナリを作れないので、一つづつ作って後で合体。
libjpeg を作成
[yasui@yasui-MBA: ~/Downloads/jpeg-8c][17:35] $ bash bash-3.2$ CC="gcc -arch i386" ./configure --prefix=/usr/local --enable-shared --enable-static checking build system type... i386-apple-darwin10.7.0 checking host system type... i386-apple-darwin10.7.0 checking target system type... i386-apple-darwin10.7.0 checking for a BSD-compatible install... /usr/bin/install -c .. bash-3.2$ make make all-am CC jaricom.lo .. bash-3.2$ sudo make install test -z "/usr/local/lib" || ./install-sh -c -d "/usr/local/lib" /bin/sh ./libtool --mode=install /usr/bin/install -c libjpeg.la '/usr/local/lib' .. bash-3.2$ exit
x86_64 を作成
[yasui@yasui-MBA: ~/Downloads/jpeg-8c][18:36] $ setenv CFLAGS '-arch x86_64' [yasui@yasui-MBA: ~/Downloads/jpeg-8c][18:36] $ ./configure --prefix=/usr/local/x8664 --enable-shared --enable-static checking build system type... i386-apple-darwin10.7.0 checking host system type... i386-apple-darwin10.7.0 checking target system type... i386-apple-darwin10.7.0 checking for a BSD-compatible install... /usr/bin/install -c .. config.status: executing depfiles commands config.status: executing libtool commands [yasui@yasui-MBA: ~/Downloads/jpeg-8c][18:36] $ make make all-am CC jaricom.lo CC jcapimin.lo .. [yasui@yasui-MBA: ~/Downloads/jpeg-8c][18:39] $ sudo make install Password: test -z "/usr/local/x8664/lib" || ./install-sh -c -d "/usr/local/x8664/lib" /bin/sh ./libtool --mode=install /usr/bin/install -c libjpeg.la '/usr/local/x8664/lib' [yasui@yasui-MBA: /usr/local][18:52] $ cd /usr/local [yasui@yasui-MBA: /usr/local][18:52] $ cd bin [yasui@yasui-MBA: /usr/local/bin][18:52] $ sudo lipo -create cjpeg -arch x86_64 ../x8664/bin/cjpeg -output cjpeg.new Password: [yasui@yasui-MBA: /usr/local/bin][18:53] $ sudo lipo -create djpeg -arch x86_64 ../x8664/bin/djpeg -output djpeg.new [yasui@yasui-MBA: /usr/local/bin][18:53] $ sudo lipo -create jpegtran -arch x86_64 ../x8664/bin/jpegtran -output jpegtran.new [yasui@yasui-MBA: /usr/local/bin][18:53] $ sudo lipo -create rdjpgcom -arch x86_64 ../x8664/bin/rdjpgcom -output rdjpgcom.new [yasui@yasui-MBA: /usr/local/bin][18:53] $ sudo lipo -create wrjpgcom -arch x86_64 ../x8664/bin/rdjpgcom -output wrjpgcom.new [yasui@yasui-MBA: /usr/local/bin][18:54] $ sudo mv cjpeg.new cjpeg [yasui@yasui-MBA: /usr/local/bin][18:54] $ sudo mv djpeg.new djpeg [yasui@yasui-MBA: /usr/local/bin][18:54] $ sudo mv jpegtran.new jpegtran [yasui@yasui-MBA: /usr/local/bin][18:54] $ sudo mv rdjpgcom.new rdjpgcom [yasui@yasui-MBA: /usr/local/bin][18:54] $ sudo mv wrjpgcom.new wrjpgcom
ユニバーサルバイナリの作成
[yasui@yasui-MBA: ~/Downloads/jpeg-8c][18:39] $ cd /usr/local/lib [yasui@yasui-MBA: /usr/local/lib][18:39] $ ls ./ libfreetype.6.dylib* libfreetype.dylib@ libjpeg.8.dylib* libjpeg.dylib@ pkgconfig/ ../ libfreetype.a libfreetype.la* libjpeg.a libjpeg.la* [yasui@yasui-MBA: /usr/local/lib][18:39] $ file libjpeg.a libjpeg.a: current ar archive random library [yasui@yasui-MBA: /usr/local/lib][18:39] $ file libjpeg.8.dylib libjpeg.8.dylib: Mach-O dynamically linked shared library i386 [yasui@yasui-MBA: /usr/local/lib][18:41] $ sudo lipo -create libjpeg.a -arch x86_64 ../x8664/lib/libjpeg.a -output libjpeg.new.a [yasui@yasui-MBA: /usr/local/lib][18:41] $ sudo lipo libjpeg.8.dylib -create -arch x86_64 ../x8664/lib/libjpeg.8.dylib -output libjpeg.8.new.dylib [yasui@yasui-MBA: /usr/local/lib][18:42] $ sudo mv libjpeg.8.new.dylib libjpeg.8.dylib [yasui@yasui-MBA: /usr/local/lib][18:42] $ sudo mv libjpeg.new.a libjpeg.a [yasui@yasui-MBA: /usr/local/lib][18:42] $ ls ./ libfreetype.6.dylib* libfreetype.dylib@ libjpeg.8.dylib* libjpeg.dylib@ pkgconfig/ ../ libfreetype.a libfreetype.la* libjpeg.a libjpeg.la* [yasui@yasui-MBA: /usr/local/lib][18:42] $
Freetype の作成
i386版のみ。
[yasui@yasui-MBA: ~/Downloads/jpeg-8c][17:36] $ cd .. [yasui@yasui-MBA: ~/Downloads][17:40] $ tar zxf freetype-2.4.4.tar.gz [yasui@yasui-MBA: ~/Downloads][17:40] $ cd freetype-2.4.4 [yasui@yasui-MBA: ~/Downloads/freetype-2.4.4][17:40] $ setenv CFLAGS '-arch i386' [yasui@yasui-MBA: ~/Downloads/freetype-2.4.4][17:40] $ setenv CPPFLAGS '-arch i386' [yasui@yasui-MBA: ~/Downloads/freetype-2.4.4][17:40] $ ./configure --prefix=/usr/local--enable-shared --enable-static FreeType build system -- automatic system detection The following settings are used: .. [yasui@yasui-MBA: ~/Downloads/freetype-2.4.4][17:40] $ make ./builds/unix/libtool --mode=compile gcc -pedantic -ansi -I/Users/yasui/Downloads/freetype-2.4.4/objs -I./builds/unix -I/Users/yasui/Downloads/freetype-2.4.4/include -c -Wall -arch i386 -DFT_CONFIG_OPTION_SYSTEM_ZLIB -DDARWIN_NO_CARBON -DFT_CONFIG_CONFIG_H="<ftconfig.h>" -DFT2_BUILD_LIBRARY -DFT_CONFIG_MODULES_H="<ftmodule.h>" -o /Users/yasui/Downloads/freetype-2.4.4/objs/ftsystem.lo builds/unix/ftsystem.c lib .. [yasui@yasui-MBA: ~/Downloads/freetype-2.4.4][17:41] $ sudo make install ./builds/unix/mkinstalldirs /usr/local/lib \ /usr/local/lib/pkgconfig \ /usr/local/include/freetype2/freetype/config \ /usr/local/include/freetype2/freetype/cache \ /usr/local/bin \ /usr/local/share/aclocal [yasui@yasui-MBA: ~/Downloads/freetype-2.4.4][17:41] $ cd ../Imaging-1.1.7
x86_86版を作成
[yasui@yasui-MBA: ~/Downloads/freetype-2.4.4][18:56] $ setenv CPPFLAGS '-arch x86_64' [yasui@yasui-MBA: ~/Downloads/freetype-2.4.4][18:58] $ setenv CFLAGS '-arch x86_64' [yasui@yasui-MBA: ~/Downloads/freetype-2.4.4][18:58] $ ./configure --prefix=/usr/local/x8664 --enable-shared --enable-static FreeType build system -- automatic system detection .. [yasui@yasui-MBA: ~/Downloads/freetype-2.4.4][18:59] $ make ./builds/unix/libtool --mode=compile gcc -pedantic -ansi -arch x86_64 -I/Users/yasui/Downloads/freetype-2.4.4/objs -I./builds/unix -I/Users/yasui/Downloads/freetype-2.4.4/include -c -Wall -arch x86_64 -DFT_CONFIG_OPTION_SYSTEM_ZLIB -DDARWIN_NO_CARBON -DFT_CONFIG_CONFIG_H="<ftconfig.h>" -DFT2_BUILD_LIBRARY -DFT_CONFIG_MODULES_H="<ftmodule.h>" -o /Users/yasui/Downloads/freetype-2.4.4/objs/ftsystem.lo builds/unix/ftsystem.c .. [yasui@yasui-MBA: ~/Downloads/freetype-2.4.4][18:59] $ sudo make install ./builds/unix/mkinstalldirs /usr/local/x8664/lib \ /usr/local/x8664/lib/pkgconfig \ /usr/local/x8664/include/freetype2/freetype/config \ /usr/local/x8664/include/freetype2/freetype/cache \ /usr/local/x8664/bin \ /usr/local/x8664/share/aclocal ..
FreeType のユニバーサルバイナリーを作成
[yasui@yasui-MBA: /usr/local][19:00] $ ls x8664/lib/ ./ ../ libfreetype.6.dylib* libfreetype.a libfreetype.dylib@ libfreetype.la* pkgconfig/ [yasui@yasui-MBA: /usr/local][19:00] $ ls x8664/bin ./ ../ freetype-config* [yasui@yasui-MBA: /usr/local][19:00] $ cd lib [yasui@yasui-MBA: /usr/local/lib][19:02] $ sudo lipo -create libfreetype.6.dylib -arch x86_64 ../x8664/lib/libfreetype.6.dylib -output libfreetype.6.new.dylib [yasui@yasui-MBA: /usr/local/lib][19:02] $ sudo lipo -create libfreetype.a -arch x86_64 ../x8664/lib/libfreetype.a -output libfreetype.new.a [yasui@yasui-MBA: /usr/local/lib][19:03] $ sudo mv libfreetype.6.new.dylib libfreetype.6.dylib [yasui@yasui-MBA: /usr/local/lib][19:04] $ sudo mv libfreetype.new.a libfreetype.a [yasui@yasui-MBA: /usr/local/lib][19:04] $ file libfreetype.6.dylib libfreetype.6.dylib: Mach-O universal binary with 2 architectures libfreetype.6.dylib (for architecture i386): Mach-O dynamically linked shared library i386 libfreetype.6.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64
PIL をインストール
PILをインストールする。コンパイル時にCFLAGSとかでi386系しかコンパイルをさせる。これがないと、asコマンドがppcをサポートしてないのに、ppc系のコンパイルをしようとしてコケる。
[yasui@yasui-MBA: ~/Downloads/Imaging-1.1.7][17:44] $ sudo ARCHFLAGS='-arch i386 -arch x86_64' CFLAGS='-arch i386 -arch x86_64' python setup.py install running install running build .. running install_egg_info Writing /Library/Python/2.6/site-packages/PIL/PIL-1.1.7-py2.6.egg-info creating /Library/Python/2.6/site-packages/PIL.pth [yasui@yasui-MBA: ~/Downloads/Imaging-1.1.7][17:44] $
Python をいじくる
Pythonのユニバーサルバイナリを、i386とx86_64のみにする。
[yasui@yasui-MBA: /System/Library/Frameworks/Python.framework/Versions/2.6/bin][18:26] $ ls ./ 2to3@ idle@ pydoc@ python@ python2.6* pythonw@ smtpd.py@ ../ 2to32.6* idle2.6* pydoc2.6* python-config@ python2.6-config* pythonw2.6* smtpd2.6.py* [yasui@yasui-MBA: /System/Library/Frameworks/Python.framework/Versions/2.6/bin][18:26] $ sudo lipo -remove ppc7400 python2.6 -output python2.6.intel [yasui@yasui-MBA: /System/Library/Frameworks/Python.framework/Versions/2.6/bin][18:26] $ sudo cp python2.6 python2.6.original [yasui@yasui-MBA: /System/Library/Frameworks/Python.framework/Versions/2.6/bin][18:27] $ sudo mv python2.6.intel python2.6 [yasui@yasui-MBA: /System/Library/Frameworks/Python.framework/Versions/2.6/bin][18:27] $ ls ./ 2to3@ idle@ pydoc@ python@ python2.6* python2.6.original* pythonw2.6* smtpd2.6.py* ../ 2to32.6* idle2.6* pydoc2.6* python-config@ python2.6-config* pythonw@ smtpd.py@ [yasui@yasui-MBA: /System/Library/Frameworks/Python.framework/Versions/2.6/bin][18:27] $ file python2.6 python2.6: Mach-O universal binary with 2 architectures python2.6 (for architecture x86_64): Mach-O 64-bit executable x86_64 python2.6 (for architecture i386): Mach-O executable i386
最後にちょっとしたテスト
[yasui@yasui-MBA: ~/Downloads/Imaging-1.1.7][19:20] $ cd Scripts/ [yasui@yasui-MBA: ~/Downloads/Imaging-1.1.7/Scripts][19:20] $ ls ./ README explode.py painter.py pildriver.py pilfont.py player.py viewer.py ../ enhancer.py gifmaker.py pilconvert.py pilfile.py pilprint.py thresholder.py [yasui@yasui-MBA: ~/Downloads/Imaging-1.1.7/Scripts][19:23] $ python viewer.py /System/Library//CoreServices/loginwindow.app/Contents/Resources/loginwindow.png
上のコマンドを実行して、「i」の文字が表示されたらとりあえず動いてる証拠です。