qt.qpa.plugin:即使找到了“”,也无法加载Qt平台插件“xcb”。”

问题描述 投票:0回答:8

我已经安装了gqcnnPyrepautolab_core。之后,我执行了我同事编写的代码,并且在他的计算机上运行良好。

但是,我无法运行代码。发生的错误是

python3.7/site-packages/cv2/qt/plugins/platforms" ...
QFactoryLoader::QFactoryLoader() looking at "/home/bak/anaconda3/envs/pyrep/lib/python3.7/site-packages/cv2/qt/plugins/platforms/libqxcb.so"
Found metadata in lib /home/bak/anaconda3/envs/pyrep/lib/python3.7/site-packages/cv2/qt/plugins/platforms/libqxcb.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "xcb"
        ]
    },
    "archreq": 0,
    "className": "QXcbIntegrationPlugin",
    "debug": false,
    "version": 331520
}


In /home/bak/anaconda3/envs/pyrep/lib/python3.7/site-packages/cv2/qt/plugins/platforms/libqxcb.so:
  Plugin uses incompatible Qt library (5.15.0) [release]
"The plugin '/home/bak/anaconda3/envs/pyrep/lib/python3.7/site-packages/cv2/qt/plugins/platforms/libqxcb.so' uses incompatible Qt library. (5.15.0) [release]" 
         not a plugin
QFactoryLoader::QFactoryLoader() checking directory path "/home/bak/anaconda3/envs/pyrep/plugins/platforms" ...
QFactoryLoader::QFactoryLoader() looking at "/home/bak/anaconda3/envs/pyrep/plugins/platforms/libqeglfs.so"
Found metadata in lib /home/bak/anaconda3/envs/pyrep/plugins/platforms/libqeglfs.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "eglfs"
        ]
    },
    "className": "QEglFSIntegrationPlugin",
    "debug": false,
    "version": 329991
}


Got keys from plugin meta data ("eglfs")
QFactoryLoader::QFactoryLoader() looking at "/home/bak/anaconda3/envs/pyrep/plugins/platforms/libqminimal.so"
Found metadata in lib /home/bak/anaconda3/envs/pyrep/plugins/platforms/libqminimal.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "minimal"
        ]
    },
    "className": "QMinimalIntegrationPlugin",
    "debug": false,
    "version": 329991
}


Got keys from plugin meta data ("minimal")
QFactoryLoader::QFactoryLoader() looking at "/home/bak/anaconda3/envs/pyrep/plugins/platforms/libqminimalegl.so"
Found metadata in lib /home/bak/anaconda3/envs/pyrep/plugins/platforms/libqminimalegl.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "minimalegl"
        ]
    },
    "className": "QMinimalEglIntegrationPlugin",
    "debug": false,
    "version": 329991
}


Got keys from plugin meta data ("minimalegl")
QFactoryLoader::QFactoryLoader() looking at "/home/bak/anaconda3/envs/pyrep/plugins/platforms/libqoffscreen.so"
Found metadata in lib /home/bak/anaconda3/envs/pyrep/plugins/platforms/libqoffscreen.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "offscreen"
        ]
    },
    "className": "QOffscreenIntegrationPlugin",
    "debug": false,
    "version": 329991
}


Got keys from plugin meta data ("offscreen")
QFactoryLoader::QFactoryLoader() looking at "/home/bak/anaconda3/envs/pyrep/plugins/platforms/libqvnc.so"
Found metadata in lib /home/bak/anaconda3/envs/pyrep/plugins/platforms/libqvnc.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "vnc"
        ]
    },
    "className": "QVncIntegrationPlugin",
    "debug": false,
    "version": 329991
}


Got keys from plugin meta data ("vnc")
QFactoryLoader::QFactoryLoader() looking at "/home/bak/anaconda3/envs/pyrep/plugins/platforms/libqxcb.so"
Found metadata in lib /home/bak/anaconda3/envs/pyrep/plugins/platforms/libqxcb.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "xcb"
        ]
    },
    "className": "QXcbIntegrationPlugin",
    "debug": false,
    "version": 329991
}


Got keys from plugin meta data ("xcb")
QFactoryLoader::QFactoryLoader() checking directory path "/home/bak/anaconda3/envs/pyrep/bin/platforms" ...
Cannot load library /home/bak/anaconda3/envs/pyrep/plugins/platforms/libqxcb.so: (/home/bak/anaconda3/envs/pyrep/plugins/platforms/../../lib/libQt5XcbQpa.so.5: symbol _ZN11QFontEngine14bitmapForGlyphEj6QFixedRK10QTransform version Qt_5_PRIVATE_API not defined in file libQt5Gui.so.5 with link time reference)
QLibraryPrivate::loadPlugin failed on "/home/bak/anaconda3/envs/pyrep/plugins/platforms/libqxcb.so" : "Cannot load library /home/bak/anaconda3/envs/pyrep/plugins/platforms/libqxcb.so: (/home/bak/anaconda3/envs/pyrep/plugins/platforms/../../lib/libQt5XcbQpa.so.5: symbol _ZN11QFontEngine14bitmapForGlyphEj6QFixedRK10QTransform version Qt_5_PRIVATE_API not defined in file libQt5Gui.so.5 with link time reference)"
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/home/bak/anaconda3/envs/pyrep/lib/python3.7/site-packages/cv2/qt/plugins" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: eglfs, minimal, minimalegl, offscreen, vnc, xcb.

如果您想详细查看完整的错误,请参阅此处。 上面的 '/pyrep/' 是我的 anaconda 环境名称。

看来是qt引起的。但我无法解决这个问题。

我应该怎么做才能解决这个问题?

python opencv anaconda qt5
8个回答
15
投票

当您将

opencv
pyqt5
一起使用时,会出现此问题。看起来
opencv
内部使用的qt插件与
pyqt5
不兼容。只需在
QT_QPA_PLATFORM_PLUGIN_PATH
语句之后取消设置环境变量
import cv2
即可。

import os

os.environ.pop("QT_QPA_PLATFORM_PLUGIN_PATH")

您还可以在导入后更新平台插件路径

opencv

import os

os.environ.update({"QT_QPA_PLATFORM_PLUGIN_PATH": "/home/udara/anaconda3/envs/research-headless/lib/python3.8/site-packages/PyQt5/Qt5/plugins/xcbglintegrations/libqxcb-glx-integration.so"})

请注意,这将使

opencv
窗口函数无法使用。如果您想使用它们,则必须从源代码构建
opencv
,而不使用
qt
插件。您可以使用
opencv
插件而不是
gtk
来构建
qt

参考文献https://forum.qt.io/post/654289


4
投票

终于找到解决办法了! https://github.com/stepjam/PyRep/issues/76

问题是在conda环境中加载Qt。

当我输入

qmake -version
时,终端窗口向我显示了 anaconda 中的 qt。 在我遵循上述网址的第一个答案后,我可以解决问题。


4
投票

我想在这里补充一些东西。

我遇到了这个问题,但是在 debian10 上,并且提到的解决方案都没有帮助。真正有帮助的是,我意识到,就我而言,pip 默认安装了 pyqt5 的 5.15.2 版本。不过,这里(https://repology.org/project/python:pyqt5/versions)说明debian10推荐的pyqt5版本是5.11.3。

当我用该版本重新安装 pyqt5 时:

$ pip3 安装 PyQt5==5.11.3

问题已解决。 重点是,检查一下可能是个好主意:

  • pip默认安装的是哪个版本的pyqt5
  • 建议您的操作系统/发行版使用哪个版本的 pyqt5

4
投票

通过https://github.com/NVlabs/instant-ngp/discussions/300解决了我的问题

pip uninstall opencv-python
pip install opencv-python-headless

这似乎是 cv2 Python 包及其在 Qt 中循环方式的问题


3
投票

这可能与类似的错误消息有关。

我刚刚在 Ubuntu 20.04、Python 3.8 中尝试使用 matplotlib_backend_qtquick 时遇到了这个问题。

提到的线程中的这个答案为我解决了这个问题:https://askubuntu.com/a/1069502


0
投票

如果您在没有显示/图形输出的计算机(例如服务器)上运行此程序,请确保您的脚本不会调用任何用于图形输出的 cv2 函数,例如

cv2.namedWindow
cv2.imshow


0
投票
  1. conda list | grep 'qt'

  2. 对于每个找到的条目执行以下操作:

conda remove --force package_name
其中
package_name
是上一个命令返回的名称


0
投票

这是

opencv
pyQt5
的依赖问题。
pyQt5
不完全支持
opencv-contrib-python
。我正在构建一个带有
mediapipe
opencv
pyQt5
模块的应用程序,并与问题斗争了好几天。我发现这个依赖问题仅仅通过卸载
opencv-contrib-python
并安装
opencv-python-headless
并不能完全解决。这个以及我发现的有关此问题的所有其他解决方案只是临时修复,如果您想在新计算机上部署应用程序或脚本,效果不会很好。

我发现最好的解决方案是使用 pyQt6。 pyQt6 完全支持 opencv-contrib-python。因此,只需卸载

pyQt5
的所有内容并安装
pyQt6

这将卸载每个

pyQt5
模块:

pip freeze | grep -E '^PyQt5' | awk -F'==' '{print $1}' | xargs pip uninstall -y

然后安装

pyqt6
:

pip install pyqt6
© www.soinside.com 2019 - 2024. All rights reserved.