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 ぐらいになりました。
コメント
コメントを投稿