環境
- Mac OS X 10.7.3 Lion
- Python 2.7.2
- py2app 0.5.3
- wxPython 2.8.12.1
インストール
py2app
sudo easy_install-2.6 py2app
とターミナルで実行します。
wxpython
http://www.wxpython.org/download.phpからMac用のインストーラをダウンロードしてインストールします。
setup.pyを書きだす
appにしたいスクリプトがscript.pyだとして、script.pyのフォルダに移動します。
py2applet --make-setup script.py
と実行すると、setup.pyが書き出されます
appを書きだす
python setup.py py2app -A
で書き出されるはずなのですが、、、なんだかエラーが出ました。
#python vmg-gui.py Traceback (most recent call last): File "vmg-gui.py", line 1, in import wx File "/usr/local/lib/wxPython-unicode-2.8.12.1/lib/python2.7/site-packages/wx-2.8-mac-unicode/wx/__init__.py", line 45, in from wx._core import * File "/usr/local/lib/wxPython-unicode-2.8.12.1/lib/python2.7/site-packages/wx-2.8-mac-unicode/wx/_core.py", line 4, in import _core_ ImportError: dlopen(/usr/local/lib/wxPython-unicode-2.8.12.1/lib/python2.7/site-packages/wx-2.8-mac-unicode/wx/_core_.so, 2): no suitable image found. Did find: /usr/local/lib/wxPython-unicode-2.8.12.1/lib/python2.7/site-packages/wx-2.8-mac-unicode/wx/_core_.so: no matching architecture in universal wrapper
いろいろと調べたところ、どうやらwxPythonのビルドが64bitに対応していないとのこと。なんと!Windowsでしょっちゅう起こる32bitと64bitの問題にMacでは出会ったことはないので、Macは完全に64bitに移行していたのかと思っていたのですが、こんなところで32bit互換モードのありがたさを味わうことになるとは。
ちなみに、wxPythonのサイトをよく読んでみると、Since they use the Carbon API they are limited to running in 32-bit mode.と書いてありました。あいやや。64bit対応を切に願います。
というわけですべての実行を32bitモードで行うことになります。
32bitモードはarch -i386とつけるだけです。例えば、下のように32bitモードで実行したPythonにint型の最大値は?と聞くと、2147483647と返ってくるので、ちゃんと32bitモードであることが確認できます。
#arch -i386 python Python 2.7.2 (v2.7.2:8527427914a2, Jun 11 2011, 15:22:34) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import sys; print sys.maxint 2147483647
参考 : http://stackoverflow.com/questions/1654837/run-an-os-x-universal-binary-in-32-bit-mode
以上をまとめると、
arch -i386 python setup.py py2app -A
とすればいいことがわかりました。これで、distフォルダ内に、.appが生成されます。
appを実行する
wxPythonを使っていなければ、普通に起動するのですが、使用している場合は、32bitモードで起動する必要があります。appを右クリックし、get Infoします。この中に、32bitモードで実行する、というオプションがあるので、チェックします。 これで、正常に実行できるはずです。