py2exe:生成的EXE无法加载

时间:2011-10-26 20:24:27

标签: python pyqt4 py2exe

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

我的应用程序在加载时没有显示SVG图像(来自Exe),所以我挖了一下,看到我必须修改我的setup.py以包含qt.conf和一些DLL。

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

我使用了qt.conf,发现我的Exe没有加载,除非我删除了qt.conf,所以我觉得它格式不正确。

这是我的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']
  }
  }
)

1 个答案:

答案 0 :(得分:1)

如果我没记错,Py2exe就会停止使用,所以使用它真的不安全。

我使用的是cx_Freeze,它在工作中从未让我失望过。它也可能对你有帮助。

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

另外,请确保您正在复制imageformats qt插件目录。它以前给人们带来了麻烦。 imageformats文件夹也是svg插件所在的位置。您还需要复制PyQt4.QtXmlPyQt4.QtSvg dll / s's(svg插件所需)。

我的项目有一个cx_Freeze的build_binary.py文件,它自动检测插件目录并复制所需的东西。它可以帮助你take a look at it