我有一个 PySide 应用程序,我正在将其转换为要在 Windows 7 上运行的 exe,而无需使用 py2exe 的任何依赖项。
这是 setup.py 中的设置
setup(windows=[{
"script" : "src/main.py",
"dest_base" : "xxx-setup-" + configuration.version,
"icon_resources": [(1, "images/xxx_icon.ico")],
"other_resources": [(24,1, manifest)]
}],
name='xxx',
data_files=[('imageformats',[r'C:\Python27\Lib\site-packages\PySide\plugins\imageformats\qico4.dll'])],
options={"py2exe" : {
"includes" : ["simplejson", "sip", "PySide.QtNetwork", "requests", "pysphere", "PySide.QtCore"],
"excludes" : ["Tkconstants", "Tkinter", "tcl"],
"dll_excludes" : ['w9xpopen.exe', 'MSVCP90.dll'],
"bundle_files" : 1,
"optimize": 2,
"compressed": True }},
zipfile=None,
**py2exe_options)
在 src/main.py 我有:
...
webAppDir = unzipResources()
app = QtGui.QApplication(sys.argv)
window = QtGui.QMainWindow()
app.setWindowIcon(QtGui.QIcon('%s/images/xxx_icon.ico' % webAppDir))
window.setWindowIcon(QtGui.QIcon('%s/images/xxx_icon.ico' % webAppDir))
...
如果我将 bundle_files 更改为 2 并在此处建议 dll_excludes 和 data_files,它会起作用并且图标会出现在任务栏和窗口栏中:
https://stackoverflow.com/a/5643540/901641
不幸的是,将 bundle_files 设置为 2 意味着 python 不包含在 exe 中,因此它需要用户安装 python,这是不可接受的。那么,为什么窗口栏和任务栏图标设置不正确呢?
编辑:进一步的实验表明,只需将 bundle_files 设置为 3 即可完成这项工作,而无需更改 dll_excludes 或 data_files。不幸的是,这再次意味着 Python 不包含在 exe 中,因此它要求用户安装 Python,这也是不可接受的。
编辑 2x:我尝试通过将以下内容添加到 setup.py 来扩展 py2exe:
from py2exe.build_exe import py2exe as build_exe
class Extender(build_exe):
def copy_dlls(self, dlls):
dlls.append(r'C:\Python27\Lib\site-packages\PySide\plugins\imageformats\qico4.dll')
build_exe.copy_dlls(self, dlls)
py2exe_options={'cmdclass':{'py2exe':Extender},}
它将 dll 复制到临时构建目录中,但实际上并没有使图像出现。