最近emailモジュール関連のお陰で、py2exeを使えないことが判明してハマった。
だいぶ前のPyJUGのMLに、cx_Freezeの話があったの思い出したので試食してみたところ、
py2exeみたいにsetup.pyを書かなくても良いものの、defaultencodingの指定が必要だったりと色々な罠があった。
けれど、当初の目的だったemailモジュール関連も簡単にビルド出来た。
これに味をしめて、簡易JITコンパイラをビルドしてみた。
■ビルドするスクリプト( engine.py )
#/usr/bin/python
# -*- coding: utf-8 -*-
import os,sys,imp
if hasattr(sys,"setdefaultencoding"):
sys.setdefaultencoding("utf-8")
def is_frozen():
return ( hasattr(sys, "frozen") or # new py2exe
hasattr(sys, "importers") # old py2exe
or imp.is_frozen("__main__") ) # tools/freeze
def get_exec_dir():
return os.path.abspath(
os.path.dirname(
sys.executable if is_frozen() else sys.argv[0]
)
)
if __name__ == '__main__':
if len(sys.argv) > 1:
mdfile = sys.argv[1]
if os.path.exists(mdfile):
mdname = mdfile.strip('.py')
md = __import__(mdname)
md.bootstrap( get_exec_dir() )
■動的実行するサンプルスクリプト( sample.py )
#/usr/bin/python # -*- coding: utf-8 -*- import sys def bootstrap( execdir ): print execdir print sys.argv
■ビルドコマンド
■サンプルスクリプト実行コマンド例cxfreeze engine.py
engine.exe sample.py hoge c:\dist\ [ 'engine.exe', 'sample.py', 'hoge' ]
Farewell, vbs and wsh ! これで多少は可搬性の良いマルチプラットフォームなスクリプト実行環境が構築出来る。 GUIが必要になったら、メッセージダイアログとか程度ならTKinter等で頑張ればいい。
0 件のコメント:
コメントを投稿