我的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']
}
}
)
答案 0 :(得分:1)
如果我没记错,Py2exe就会停止使用,所以使用它真的不安全。
我使用的是cx_Freeze,它在工作中从未让我失望过。它也可能对你有帮助。
另外,请记住冻结与脚本时路径不同。通常,您需要os.path.dirname(sys.executable)
进行冻结(可以使用hasattr(sys, 'frozen')
进行测试),而不是典型的os.path.dirname(__file__)
。
另外,请确保您正在复制imageformats
qt插件目录。它以前给人们带来了麻烦。 imageformats文件夹也是svg插件所在的位置。您还需要复制PyQt4.QtXml
和PyQt4.QtSvg
dll / s's(svg插件所需)。
我的项目有一个cx_Freeze的build_binary.py文件,它自动检测插件目录并复制所需的东西。它可以帮助你take a look at it。