【问题标题】:py2exe: Generated EXE doesn't loadpy2exe:生成的 EXE 不加载
【发布时间】:2023-04-01 02:02:01
【问题描述】:

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

我的应用程序在加载(来自 Exe)时没有显示 SVG 图像,所以我挖掘了一下,发现我必须修改我的 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']
  }
  }
)

【问题讨论】:

    标签: python pyqt4 py2exe


    【解决方案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/so's over as well(svg 插件需要)。

    我的项目有一个用于 cx_Freeze 的 build_binary.py 文件,它会自动检测插件目录并复制所需的内容。可以通过take a look at it 帮助您。

    【讨论】:

    • py2exe 看起来有点笨重,而 cx_freeze 在 Linux 上对我来说效果很好,所以我再试一次。我一定会查看您的代码,并且由于您的项目使用 SVG 并且 在编译成二进制文件时可以正常工作,我猜您的代码可以正常工作!谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 2011-11-13
    • 2012-03-08
    • 2015-05-14
    • 2014-10-11
    • 2016-03-08
    • 1970-01-01
    相关资源
    最近更新 更多