python py2app & py2exe
py2exe,py2appはpythonプログラムを実行形式に変換するためのライブラリです。
自分で作った.pyプログラムをexeにしたい時に使用します。
exe化ソフトは他にもありますが、py2exeは使い方も簡単でオプションもそれなりにあり使いやすいです。
以下がpy2exeとpy2appの簡単な使い方です。
windows: py2exe
1. http://www.py2exe.org/から最新のpy2exeをダウンロードする
現時点では0.6.9(2008-11-06)が最新。
自分のpythonのバーションに合ったファイルを選択(自分の環境での例)
py2exe-0.6.9.win32-py2.6.exe
2. ダウンロードしたファイルを実行する。
c:\python26\Lib\site-packagesにpy2exeのディレクトリが作成される。
※追加のライブラリはここに展開される
3. setup.pyファイルを作成する
CUI用アプリケーションの例:
from distutils.core import setup
import py2exe
setup(console=['filecut.py'])
GUI用アプリケーションの例(コンソール非表示):
from distutils.core import setup
import py2exe
setup(windows=[{"script":"filecut.pyw","icon_resources":[1,"test.ico"")]}],)
GUIアプリ用のsetupでは、
"script"→実行形式にしたいpythonファイル、
"icon_resources"→exeファイルにした時に表示されるアイコン。
※指定するソースファイルはコンソールが表示されないように拡張子を[.pyw]に変更しておく
4. python setup.py py2exe を実行
python setup.py py2exe
3で作成したsetup.pyファイルを実行する。オプションにpy2exeを付ける。
同じディレクトリにdistディレとbuildディレが作成される。
アプリケーションが入っているディレクトリはdist.
※setup.pyを実行する時は同じディレクトリにexe化したいソースファイル(.py)を置いておく。
アイコンをつける時も同じディレクトリにアイコンをセットしておく(path指定なら問題なし)
MAC OSX 10.6(snow leopard) : py2app
1. 標準でついているeasy_installでpy2appを入れる
※MacPortの中に含まれていただけかも…(調べていない)
ターミナルを開き
$ sudo su -
# easy_install-2.6 py2app
2. #py2applet --make-setup [ソースファイル] を実行
py2applet --make-setup main.py
ここでスクリプトとして実行されるファイルを指定する。
setup.pyが自動生成される
3. #python setup.py py2app -A を実行
python setup.py py2app -A
これでdistの中にmain.app(2.で指定したソースファイル名)が生成される。
※自分の環境(64bit)ではargv-emulationってのが使えないので、setup.pyを実行する前にスクリプトを書き換えるか、オプション付きで実行する。
APP=['ソースファイル']
DATA_FILES =
OPTION = {'argv_emulation: True'} # Falseにする
か、
#python setup.py py2app --argv-emulation -A
しかし、これでもまだエラーが出る。
running py2app
error: You must specify either app or plugin
生成されたsetup.pyを見てみると、
意味深にAPP=となってリストにmain.pyが入っていない。
そのAPPは下の方でapp = APPと参照されているので、エラーでappを指定してください?的な事がでてると推測する。
なので、setup.pyは生成しないで自分で書く↓
setup.py
"""
this is a setup.py script generated by py2applet
Usage:
python setup.py py2app
"""
from setuptools import setup
setup(
app=["ファイル名"],
setup_requires=['py2app'],
)
※これでも実行できなかったら、次を試してからやり直してみる
http://svn.pythonmac.org/py2app/py2app/trunk/doc/index.html
・下のソースを保存して実行する
#!usr/bin/env python
import os,shutil
from distutils.sysconfig import *
py2app = os.path.join(get_python_lib(),'py2app')
import shutil
if os.path.isdir(py2app):
print "removing " + py2app
shutil.rmtree(py2app)
if os.path.exists(py2app + '.pth'):
print "Removing" + py2app + '.pth'
os.unlink(py2app + '.pth')
for path in os.environ['PATH'].split(':'):
script = os.path.join(path,'py2applet')
if os.path.exists(script):
print "Removing" + script
os.unlink(script)
詳しく目を通していないが、削除しなければならないファイルが3つあるらしい…
実行すると1個だけみつかり削除される。
以上pythonを実行形式にする。
どちらも同じように使えるので、結構簡単に使う事ができる。
標準であるライブラリならいいが、周りからひっぱてきたライブラリだった場合は、別の方法でそれらを指定しなければならない可能性もある。とりあえず普通に使う分には問題を感じられず、使いやすい。