Python py2exe:生成的EXE不';t载荷

Python py2exe:生成的EXE不';t载荷,python,pyqt4,py2exe,Python,Pyqt4,Py2exe,我的PyQt4应用程序的py2exe二进制文件在屏幕上短暂闪烁,然后消失。我不知道为什么,但以下是以前发生的事情: 我的应用程序在加载(从Exe)时没有显示SVG图像,所以我仔细研究了一下,发现我必须修改我的setup.py以包含qt.conf和一些DLL 然后,在包含qt.conf之后,二进制文件停止加载 我玩了qt.conf,发现除非删除qt.conf,否则我的Exe不会加载,所以我认为它的格式不正确 这是我的qt.conf: [Paths] Plugins = plugins 我尝试了绝

我的PyQt4应用程序的py2exe二进制文件在屏幕上短暂闪烁,然后消失。我不知道为什么,但以下是以前发生的事情:

我的应用程序在加载(从Exe)时没有显示SVG图像,所以我仔细研究了一下,发现我必须修改我的
setup.py
以包含
qt.conf
和一些DLL

然后,在包含
qt.conf
之后,二进制文件停止加载

我玩了
qt.conf
,发现除非删除
qt.conf
,否则我的Exe不会加载,所以我认为它的格式不正确

这是我的
qt.conf

[Paths]
Plugins = plugins
我尝试了绝对路径,前斜线,后斜线,你可以说。我甚至用这个文件复制了整个PyQt4文件夹,但仍然没有成功

如果相关,这是我的
setup.py

import os, sys, glob

from distutils.core import setup
from py2exe.build_exe import py2exe

def find_data_files(source,target,patterns):
  if glob.has_magic(source) or glob.has_magic(target):
    raise ValueError("Magic not allowed in src, target")

  ret = {}

  for pattern in patterns:
    pattern = os.path.join(source,pattern)

    for filename in glob.glob(pattern):
      if os.path.isfile(filename):
        targetpath = os.path.join(target,os.path.relpath(filename,source))
        path = os.path.dirname(targetpath)
        ret.setdefault(path,[]).append(filename)
  return sorted(ret.items())

setup(
#  zipfile = None,
  data_files = find_data_files('', '', ['bin/*', 'plugins/iconengines/*', 'qt.conf']),
  windows = [{'script': 'main.py'}],
#  cmdclass = {'py2exe': Py2exe},
  options = {
  'py2exe': {
    'bundle_files': 1,
    'includes': ['sip'],
    'dll_excludes': ['MSVCP90.dll']#, 'qsvgicon4.dll']
  }
  }
)

如果我没记错的话,Py2exe已经停产了,所以使用起来真的不安全

我使用cx_Freeze,这在工作中从未让我失望过。这可能也会帮助你

另外,请记住,冻结与脚本时,路径是不同的。通常,您需要使用
os.path.dirname(sys.executable)
进行冻结(您可以使用
hasattr(sys,'freezed')
),而不是使用典型的
os.path.dirname(\uu文件\uuuu)

另外,确保您正在复制
imageformats
qt插件目录。它曾经给人们带来过麻烦。imageformats文件夹也是svg插件所在的位置。您还需要复制
PyQt4.QtXml
PyQt4.QtSvg
dll的/so(svg插件需要)


我的项目有一个用于cx\u Freeze的build\u binary.py文件,它自动检测插件目录并复制所需的内容。如果我没记错的话,Py2exe已经停止使用了,所以使用起来确实不安全

我使用cx_Freeze,这在工作中从未让我失望过。这可能也会帮助你

另外,请记住,冻结与脚本时,路径是不同的。通常,您需要使用
os.path.dirname(sys.executable)
进行冻结(您可以使用
hasattr(sys,'freezed')
),而不是使用典型的
os.path.dirname(\uu文件\uuuu)

另外,确保您正在复制
imageformats
qt插件目录。它曾经给人们带来过麻烦。imageformats文件夹也是svg插件所在的位置。您还需要复制
PyQt4.QtXml
PyQt4.QtSvg
dll的/so(svg插件需要)


我的项目有一个用于cx\u Freeze的build\u binary.py文件,它自动检测插件目录并复制所需的内容。它可能会帮助您解决这个问题。

py2exe看起来有点笨重,而且cx\u freeze在Linux上对我来说工作得很好,所以我将再次尝试。我一定会看一下你的代码,因为你的项目使用SVG,并且在编译成二进制时可以工作,所以我猜你的代码可以工作!谢谢。py2exe看起来有点笨重,cx_-freeze在Linux上对我来说工作得很好,所以我再试试看。我一定会看一下你的代码,因为你的项目使用SVG,并且在编译成二进制时可以工作,所以我猜你的代码可以工作!谢谢