みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Python, Javascript, Processing, Unityなど.

py2appでwxpythonのGUIアプリケーションを作成

環境

  • 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モードで実行する、というオプションがあるので、チェックします。 これで、正常に実行できるはずです。