0

我有一个 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 复制到临时构建目录中,但实际上并没有使图像出现。

4

0 回答 0