最近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 件のコメント:
コメントを投稿