【问题标题】:cx_freeze + PyQt5 + pythoncx_freeze + PyQt5 + python
【发布时间】: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 文件夹,它现在可以正常工作了..

标签: python cx-freeze pyqt5


【解决方案1】:

我遇到了同样的问题,我正在使用 PyQt5 和 cx_Freeze 5.0.1 运行 Anaconda 4.4.0 Python 2.7.13

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

运行可执行文件,它应该可以工作

【讨论】:

  • 试过了,对我没用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-22
  • 2017-09-10
  • 2014-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多