PyQt を py2exe でフリージング
標準的なフリージング
# setup.py import py2exe from distutils.core import setup py2exe_options = { "compressed": 1, # 圧縮する "optimize": 2, "bundle_files": 3, "includes" : ["sip",] } setup( options={"py2exe" : py2exe_options}, windows=[{"script" : "main.py"}], # PyQt ファイル zipfile="[zipped.lib ファイル名]", )
私の環境 (XP, Py2.6.4) では、 py2exe_options
の bundle_files
は 3 (分割ファイル) じゃないと動作しませんでした。
jpeg や gif 等の画像を取り扱う場合
PyQt は bmp や png 以外の画像形式を標準でサポートしていません。その他のフォーマットはプラグインとして提供されています。プラグイン (dll) をフリージングしたファイル配下のディレクトリーに保存する必要があります。
# setup.py import os import py2exe from distutils.core import setup # 任意のフォーマットの dll を追加。特にアイコンは必要かも IMAGELIB_DIR = r"C:\path\to\python\Lib\site-packages\PyQt4\plugins\imageformats" imgfiles = [os.path.join(IMAGELIB_DIR, i) for i in [ "qgif4.dll", "qico4.dll", "qjpeg4.dll", "qmng4.dll", "qsvg4.dll", "qtiff4.dll",]] data_files = [ ("imageformats", imgfiles), ] py2exe_options = { "compressed": 1, "optimize": 2, "bundle_files": 3, "includes" : ["sip",] } setup( data_files = data_files, options={"py2exe" : py2exe_options}, windows=[{"script" : "main.py"}], # PyQt ファイル zipfile="[zipped.lib ファイル名]", )
win32ui を利用する場合
MFC (Microsoft Foundation Classes) の dll が必要 (本家ドキュメント)。
# setup.py import os import py2exe from distutils.core import setup WIN32UI_DIR = r"C:\path\to\python\Lib\site-packages\pythonwin" mfcfiles = [os.path.join(WIN32UI_DIR, i) for i in [ "mfc90.dll", "mfc90u.dll", "mfcm90.dll", "mfcm90u.dll", "Microsoft.VC90.MFC.manifest"]] IMAGELIB_DIR = r"C:\path\to\python\Lib\site-packages\PyQt4\plugins\imageformats" imgfiles = [os.path.join(IMAGELIB_DIR, i) for i in [ "qgif4.dll", "qico4.dll", "qjpeg4.dll", "qmng4.dll", "qsvg4.dll", "qtiff4.dll",]] data_files = [ ("Microsoft.VC90.MFC", mfcfiles), ("imageformats", imgfiles), ] py2exe_options = { "compressed": 1, "optimize": 2, "bundle_files": 3, "includes" : ["sip", "ctypes",] # ctypes を利用している場合は追加する } setup( data_files = data_files, options={"py2exe" : py2exe_options}, windows=[{"script" : "main.py"}], # PyQt ファイル zipfile="[zipped.lib ファイル名]", )
py2exe は利用しないライブラリーなども取り込まれるらしく、ちょっとファイルが大きくなってしまいます。私の環境では簡単なウィジェットでも 11 M ぐらいになりました。
コメント
コメントを投稿