[英]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.QtXml
和PyQt4.QtSvg
dll(也是如此)(由svg插件要求)。
我的項目有一個cx_Freeze的build_binary.py文件,它可以自動檢測插件目錄並復制所需的內容。 它可能會幫助您看看它 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.