簡體   English   中英

py2exe:無法加載生成的EXE

[英]py2exe: Generated EXE doesn't load

我的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)對於典型的os.path.dirname(__file__) ,您需要os.path.dirname(sys.executable)進行凍結(可以使用hasattr(sys, 'frozen') os.path.dirname(__file__)

另外,請確保您要復制imageformats qt插件目錄。 它曾經給人們帶來麻煩。 svg插件也位於imageformats文件夾中。 您還需要復制PyQt4.QtXmlPyQt4.QtSvg dll(也是如此)(由svg插件要求)。

我的項目有一個cx_Freeze的build_binary.py文件,它可以自動檢測插件目錄並復制所需的內容。 它可能會幫助您看看它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM