cx_freeze + PyQt5 + python

6

我正在处理一个非常奇怪的问题。基本上,我正在尝试使用PyQt5+Python3.3+Cx_Freeze4.3.2创建一个简单的窗口应用程序。当调用Python时,问题运行得非常完美:

python test.py

现在是关于基础setup.py与cx_freeze的第二部分:
import sys
from cx_Freeze import setup, Executable

base = None
if sys.platform == 'win32':
    base = 'Win32GUI'

options = {
    'build_exe': {
        'includes': 'atexit'
    }
}

executables = [
    Executable('test.py', base=base)
]

setup(name='test',
      version='0.1',
      description='test',
      options=options,
      executables=executables
      )

构建它:

python test.py build

以下文件夹已创建:
build/exe.win32-3.3:
/platforms
/imageformats
test.exe
icudt49.dll
icuin49.dll
icuuc49.dll
libGLESv2.dll
library.zip
PyQt5.QtCore.pyd
PyQt5.QtGui.pyd
PyQt5.QtWidgets.pyd
python33.dll
Qt5Core.dll
Qt5Gui.dll
Qt5Widgets.dll
sip.pyd
unicodedata.pyd
_bz2.pyd

现在运行test.exe时一切都正常。
当我把构建文件夹复制到其他电脑上时出现了问题。当我运行test.exe时,会弹出一个错误提示框:
此应用程序无法启动,因为找不到或加载不了QT平台插件“windows”。可用的平台插件有:minimal,offscreen,windows。重新安装此应用程序可能会解决此问题。
根据我所读的所有内容,这是关于平台上的dll, .exe找不到内部的qwindow.dll。为什么只有在其他PC(Win7)上发生这种情况?开发PC(Win7)正常工作。为了调试它并确保使用的qwindow.dll是平台/中的那个,在我的电脑上将文件夹重命名为平台FOO/并尝试运行test.exe,现在在dev PC上出现了相同的问题,因此dll在正确的文件夹中,将其重命名回平台/,一切正常。如果操作系统相同,文件夹只是开发PC上的简单副本,为什么其他PC不能正常工作,真是奇怪!
我查阅谷歌和大量资料,但无法找出问题所在。如果有人可以帮助的话 ;)

这真的很奇怪 - 它说它无法加载“windows”平台插件,但又将其列为可用插件之一。我想它一定因某种原因而无法加载。也许它依赖于其他东西?尝试在您的程序正常工作的PC上使用[Process Explorer](http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx),看看它是否从其他地方加载DLL。 - Thomas K
目前在PC上测试,一切正常,qwindows.dll从根文件夹内的platform/中加载(没有其他qwindows.dll被加载)... 在其他PC上,该dll未被加载。 - phreaking
是的,我的意思是由cx_Freeze创建的构建文件夹。是的,还有一些来自system32的其他dll(我认为这很正常),同时加载C:\ Python33 \ DLLs \ python3.dll和C:\ Python33 \ Lib \ site-packages \ PyQt5 \ libEGL.dll。奇怪的是加载C:\ Python33 \ DLLs \ python3.dll,因为python33.dll也是从构建文件夹中加载的。 - phreaking
我进行了其他的调试测试。在开发PC上删除了PyQt,exe给我返回了与其他PC相同的错误。重新安装PyQt后,exe正常运行。问题可能出在这里:C:\Python33\Lib\site-packages\PyQt5\libEGL.dll?只有这个dll是直接从PyQt5 python文件夹中加载的。顺便说一下,libEGL.dll没有列在构建文件夹中。 - phreaking
5
好的,找到问题了。只需将PyQt5文件夹中的libEGL.dll复制到构建文件夹即可,现在它可以正常工作了。 - phreaking
显示剩余3条评论
1个回答

0

我曾经遇到过同样的问题,我的操作环境是Anaconda 4.4.0 Python 2.7.13,使用了PyQt5和cx_Freeze 5.0.1。

将anaconda/library/plugin/platforms目录复制到包含.exe文件的目录中。

运行可执行文件,它应该可以正常运行。


尝试过了,对我没用。 - FHTMitchell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接