QuickIRを py2exeでWindowsのEXEファイルにする(3)
やっと本題の QuickIR のEXE化です
11. QuickIR をEXEファイル化する
長い前振りでごめんなさい。やっと本題です。いよいよ QuickIR を py2exe で EXEファイルに変換してみます。と言っても、ここまで来ればゴールはすぐソコ。QuickIR用に py2exe の setupスクリプトを作成すれば良いだけです。
QuickIR用の setupスクリプト"py2exe_setup.py" は以下になります。
# -*- coding: utf-8 -*-
"""
This is a py2exe setup script
Usage:
python py2exe_setup.py py2exe
"""
from distutils.core import setup
import py2exe
import os
import sys
option = {
'compressed': True,
'optimize': 2,
'bundle_files': 2,
'includes': ['irkit', 'resolve_irkit', 'pybonjour', 'tkinter'],
'excludes': [],
'packages': []
}
setup(
name='QuickIR',
version='1.0.8',
options={
'py2exe': option
},
windows=[
{'script': 'QuickIR.py',
'icon_resources': [(1, 'app32bit.ico')]
}
],
data_files=[
('images',
[r'images¥file_add.gif',
r'images¥file_delete.gif',
r'images¥file_post.gif',
r'images¥file_rename.gif',
r'images¥folder_add.gif',
r'images¥folder_delete.gif',
r'images¥folder_rename.gif',
r'images¥IRKit.gif'])
],
zipfile=None
)
cx_freezeのときに使用したアイコンファイルには16色、256色のアイコンも含まれていたため、py2exe が以下のようにエラーを吐いてしまいました。どうやらアイコン画像数が多すぎると言っているようです。そこで、32bitカラーのアイコンだけにしたアイコンファイル("app32bit.ico" )を作成しました。
C:¥> C:¥Python34¥python py2exe_setup.py py2exe
running py2exe
1 missing Modules
------------------
? readline imported from cmd, code, pdb
Building 'dist¥QuickIR.exe'.
Traceback (most recent call last):
File "py2exe_setup.py", line 45, in
zipfile=None
File "C:¥Python34¥lib¥distutils¥core.py", line 148, in setup
dist.run_commands()
File "C:¥Python34¥lib¥distutils¥dist.py", line 955, in run_commands
self.run_command(cmd)
File "C:¥Python34¥lib¥distutils¥dist.py", line 974, in run_command
cmd_obj.run()
File "C:¥Python34¥lib¥site-packages¥py2exe¥distutils_buildexe.py", line 188, in run
self._run()
File "C:¥Python34¥lib¥site-packages¥py2exe¥distutils_buildexe.py", line 268, in _run
builder.build()
File "C:¥Python34¥lib¥site-packages¥py2exe¥runtime.py", line 234, in build
self.build_exe(target, exe_path, options.libname)
File "C:¥Python34¥lib¥site-packages¥py2exe¥runtime.py", line 371, in build_exe
for res_type, res_name, res_data in BuildIcons(getattr(target, "icon_resources", ())):
File "C:¥Python34¥lib¥site-packages¥py2exe¥icons.py", line 124, in BuildIcons
grp_header = CreateGrpIconDirHeader(header, id_generator)
File "C:¥Python34¥lib¥site-packages¥py2exe¥icons.py", line 90, in CreateGrpIconDirHeader
raise ValueError("too many images for this icon: %d" % iconheader.idCount)
ValueError: too many images for this icon: 19
|
また、とても単純なのでバッチファイルにするほどでもないのですが、一応この setupスクリプトを使って EXEファイル化するバッチファイル"make_py2exe.bat" も作成しました。
@echo off
setlocal
C:¥Python34¥python py2exe_setup.py py2exe
endlocal
exit /b
こうして EXE化された QuickIRの"dist" フォルダの内容はこんな感じになります。
単独のEXEファイルというわけにはいきませんでしたが、cx_freeze に比べたら随分とスッキリしていますよね。今のところ動作も問題ないようです。
|