PyQt5 - 加载平台插件"windows"失败。可用的平台为:windows,minimal。

9
当我尝试从Eclipse运行任何PyQt5程序时,我遇到了这个错误。
“Failed to load platform plugin "windows". Available platforms are: windows, minimal”
我从未在PyQt4中遇到过这个问题,但在新版本中遇到了。
我不能运行程序。从其他问题中我知道这在Qt C ++开发中会发生,解决方案是将一些Qt dll文件复制到可执行程序目录中。
那么在Python开发(PyQt5)中我需要做同样的事情吗?将这些文件添加到我的*.py文件所在的目录中?这不应该由PyQt5安装来管理吗?
谢谢。
8个回答

11
我遇到了这个问题,使用的是PyQt5 5.0.2、Windows 8和Python 3.3.2;错误消息略有不同: 无法加载平台插件"windows"。可用的平台为: 请设置以下环境变量,然后运行应用程序。 $env:QT_QPA_PLATFORM_PLUGIN_PATH="C:\Python33\Lib\site-packages\PyQt5\plugins\platforms"

3
太棒了,你是如何发现这个变量的? - McLeary
3
请说明如何设置该环境变量。 - GLHF

7

5

在使用 cx_freeze 编译我的代码时,我遇到了类似的问题。

将 Python 安装目录下的 platforms 文件夹复制到编译后的文件夹中,问题得以解决。"platforms" 文件夹包含 qminimal.dll。


谢谢您的提示!我正在使用cx_freeze来打包我的pyqt5可执行文件。我发现我可以在选项中添加“include_files”,其中包括平台文件夹。然后它就可以工作了。 - rtrobin

4

我发现了另一种适用于我自己的解决方案。操作系统是Windows 7,使用PyQt5和Python 3.4 64位版本。

pyqt = os.path.dirname(PyQt5.__file__)
QApplication.addLibraryPath(os.path.join(pyqt, "plugins"))

您还可以设置一个环境变量QT_QPA_PLATFORM_PLUGIN_PATH,并将其路径设置为plugins目录。

os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = qt_platform_plugins_path

这在 PyInstaller 中也可以很好地实现!

只有在首先“导入PyQt5”时,此方法才有效。https://github.com/pyqt/python-qt5/issues/2 - G Huxley
当然,在调用PyQt之前,必须先导入它。 - uetoyo

1
我找到了文件:qwindows.dll,需要将其包含在我的.exe文件中,以使其独立运行而不出现错误。为此,请将qwindows.dll路径添加到您的数据文件列表中:
setup(windows=[YOURSCRIPT.py]
, data_files = [('.','DRIVE:\PythonPath\Lib\site-packages\PyQt4\plugings\platforms\qwindows.dll')]) 

你需要这样做并设置环境路径的原因是,如果qwindows.dll文件保存在同一包中,你的程序将在任何机器上运行。如果你只设置环境变量,程序只能在安装了PyQt的计算机上成功运行。

1

我喜欢uetoyo的答案,但是Anaconda已经移动了目录。这对我来说适用于Windows 7上的Python 3.5.2 Anaconda 4.2.0。

import os
if os.name == "nt":  # if windows
    import PyQt5
    pyqt_plugins = os.path.join(os.path.dirname(PyQt5.__file__),
                                "..", "..", "..", "Library", "plugins")
    QApplication.addLibraryPath(pyqt_plugins)

0

这是我在使用Anaconda Python 3.6发行版时有效的方法:

  1. 我使用pip install pyqt5安装了PyQt5。这样做会在../Anaconda3/Lib/site-packages/PyQt5路径下创建一个Qt/Plugins插件目录。

  2. 按照Roger Allen和uetoyo的方法,我添加了:

if os.name == "nt":  # if windows
    from PyQt5 import __file__
    pyqt_plugins = os.path.join(os.path.dirname(__file__), "Qt", "plugins")
    QApplication.addLibraryPath(pyqt_plugins)
    os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = pyqt_plugins

对于我的脚本来说,它也可以与pyinstaller一起使用。


0
如果您使用PySide2,您可以使用以下代码进行检查:
import os
if os.name == 'nt':
    import PySide2
    pyqt = os.path.dirname(PySide2.__file__)
    QApplication.addLibraryPath(os.path.join(pyqt, "plugins"))

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