【发布时间】:2013-12-13 05:38:22
【问题描述】:
我正在兜圈子,发生了一件非常奇怪的事情。基本上我正在尝试使用 PyQt5+python3.3+cx_freeze4.3.2 的简单窗口应用程序。问题运行完美调用python:
python test.py
现在是 cx_freeze 的基本 setup.py 的第二部分:
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
以下文件夹已创建:
构建/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 一切正常。
当我将构建文件夹复制到其他 PC 时,问题就出现了。运行test.exe时弹出错误
此应用程序无法启动,因为它无法找到或加载 QT 平台插件“windows”。
可用的平台插件有:minimal、offscreen、windows。
重新安装应用程序可能会解决此问题
根据我阅读的所有内容,它是关于平台上的 dll/.exe 在里面找不到 qwindow.dll。为什么它只发生在其他PC(win7)?开发PC(win7)工作正常。为了调试它并确保使用的 qwindow.dll 是 plataforms/ 里面的那个,我将文件夹重命名为 plataformFOO/ 并尝试运行 test.exe,现在在开发 PC 中出现同样的问题,因此,dll 在正确的文件夹中,将其重命名为平台/并且一切正常。如果操作系统相同并且文件夹是开发 PC 上的文件夹的简单副本,为什么在其他 PC 中无法正常工作。
我在谷歌上搜索,阅读了大量内容,但无法找出问题所在。如果有人可以提供帮助;)
【问题讨论】:
-
这真的很奇怪 - 它说它无法加载“windows”平台插件,但随后将其列为可用插件之一。我想它一定是由于某种原因无法加载。也许它依赖于别的东西?尝试在您的程序运行的 PC 上使用Process Explorer,看看它是否从其他地方加载 DLL。
-
现在在 PC 上测试,一切正常,qwindows.dll 是从根文件夹内的平台/加载的(没有其他 qwindows.dll 正在加载).. 在其他 PC 上没有加载 dll
-
“根文件夹”是指 cx_Freeze 复制它的构建文件夹吗?它是否从该文件夹外部加载任何其他 DLL?
-
是的,我的意思是由 cx_Freeze 创建的构建文件夹。是的,来自 system32 的其他一些 dll(我认为是正常的)并且还加载 C:\Python33\DLLs\python3.dll 和 C:\Python33\Lib\site-packages\PyQt5\libEGL.dll。奇怪的加载 C:\Python33\DLLs\python3.dll 因为 python33.dll 也是从构建文件夹加载的
-
好的,找到问题了。只需将 libEGL.dll 从 PyQt5 文件夹复制到 build 文件夹,它现在可以正常工作了..