QT-Could not load the Qt platform plugin “xcb“ in xxx even though it was found.解决

QT-Could not load the Qt platform plugin ''xcb" in xxx even though it was found. 解决

文章目录

  • 1. 杂话
  • 2. 问题
  • 3. 解决
    • 3.1 查找系统默认的 Qt 插件路径
    • 3.2 设置环境变量 QT_PLUGIN_PATH
      • 3.2.1 自动设置环境变量
    • 3.3 检查QT库是否正确加载
    • 3.4 后续
      • 3.4.1 删除或重命名 OpenCV 自带的 Qt 插件目录
      • 3.4.2 检查其他 Qt 环境变量

1. 杂话

 大伙儿应该都用过PyQT这个玩意吧,基本上来说,是用pytho写前端最方便,做多见的一个库函数了。但是呢,今天我就遇到了一个问题,Could not load the Qt platform plugin ''xcb" in “/xxxxx/envs/SAM2/lib/python3.12/site-packages/cv2/qt/plugins” even though it was found. ,这个地方j加粗的xxx是你自己的python环境。仔细一看,这个错还挺搞笑的啊,就是告诉你找到了,但是我就是load不了他。。。
 而且,更加诡异的是,这个错居然还是opencv里面报出来的,你说这不是胡闹吗。。。。anyway,根据我一顿摸爬滚打的探索,终于找到了一个最方便的解决这个问题的方法。

2. 问题

Could not load the Qt platform plugin ''xcb" in "/xxxxx/envs/SAM2/lib/python3.12/site-packages/cv2/qt/plugins" even though it was found. 

 这个报错通常与 Qt 库的配置或依赖项的问题有关,尤其是在使用 OpenCV 和 PyQt 时。如果你在一个虚拟环境中运行代码,或者使用了不同版本的依赖库,可能会导致 Qt 平台插件加载失败。

3. 解决

 首先呢,这里给出思绪无限的解决方法。这个帖子里面总结了一些常见的解决方法,基本可以解决绝大部分的问题。
 但是嘞,在我的这篇帖子里面,我给出一个更加无痛的方法,是啥呢,其实很简单,说白了这个opencv告诉你自己的QT导入不了,那咱就不伺候了呗,咱们自己直接下载一个完整版的QT,不用opencv自带的这个QT就可以了。接下来,咱们看看具体应该怎么做哈:

3.1 查找系统默认的 Qt 插件路径

 首先,你需要找到系统中 Qt 插件的位置。在大多数 Linux 发行版中,Qt 插件通常位于 /usr/lib/x86_64-linux-gnu/qt5/plugins 或类似的目录。你可以使用 find 命令来查找 Qt 插件目录:

find /usr -type d -name "qt5"

3.2 设置环境变量 QT_PLUGIN_PATH

 一旦你确定了系统的 Qt 插件路径,你需要将这个路径告知 Python 应用,以便它可以正确加载这些插件。在你的终端中运行以下命令:

export QT_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/qt5/plugins

 如果你的 Qt 插件路径不同,请将上述路径替换为正确的路径。这条命令设置了一个环境变量 QT_PLUGIN_PATH,它告诉 Qt 从哪里加载插件。在使用 OpenCV 时,程序将忽略 OpenCV 自带的 Qt 库,转而使用系统的 Qt 插件。

3.2.1 自动设置环境变量

 如果你希望每次启动脚本时都自动设置 QT_PLUGIN_PATH,可以在脚本的开头添加以下代码:

import os

# 指定系统中 Qt 插件的路径
os.environ['QT_PLUGIN_PATH'] = '/usr/lib/x86_64-linux-gnu/qt5/plugins'

 这样,每次运行脚本时,都会自动使用系统的 Qt 插件路径。

3.3 检查QT库是否正确加载

 如果你想确认你的程序确实使用了系统的 Qt 插件,你可以在脚本中插入以下代码来检查:

import PyQt5.QtCore
print(PyQt5.QtCore.QLibraryInfo.location(PyQt5.QtCore.QLibraryInfo.PluginsPath))

 这将打印出当前正在使用的 Qt 插件路径,确认是否使用了你设置的路径。

3.4 后续

 注意,如果你发现你已经设置了路径,但是你发现还是在程序还是在报一样的错,也就是说他还在去找那个倒霉opencv里面的QT,这是咋回事儿呢。。。?这个问题可能是由于多个原因引起的,尤其是在使用虚拟环境时。尽管你已经指定了 QT_PLUGIN_PATH,但由于 OpenCV 自带的 Qt 插件路径依然在系统中存在并且优先级较高,程序可能仍会尝试加载错误的插件路径。
 那么,针对这个问题,可以试试以下的解决方法。

3.4.1 删除或重命名 OpenCV 自带的 Qt 插件目录

 一种直接的解决方案是删除或重命名 OpenCV 自带的 Qt 插件目录,这样程序就不会尝试加载错误的插件。假设你已经定位到了 OpenCV 自带的 Qt 插件目录(错误信息中提到的路径为/xxxxx/envs/SAM2/lib/python3.12/site-packages/cv2/qt/plugins),你可以尝试通过以下命令重命名这个目录:

mv /xxxxx/envs/SAM2/lib/python3.12/site-packages/cv2/qt/plugins /xxxxx/envs/SAM2/lib/python3.12/site-packages/cv2/qt/plugins_backup

 通过这种方式,程序将无法加载 OpenCV 自带的插件路径,而是只能使用你在 QT_PLUGIN_PATH 中指定的系统路径。

3.4.2 检查其他 Qt 环境变量

 有时,其他 Qt 相关的环境变量可能会影响插件加载行为。你可以尝试清除或修改以下环境变量:

unset QT_QPA_PLATFORM_PLUGIN_PATH
unset QT_PLUGIN_PATH
unset QT_QPA_PLATFORM

 然后在脚本中明确设置 QT_PLUGIN_PATH 为系统的插件路径。

OK,解决啦

你可能感兴趣的:(Bug,Free,qt,python,opencv,linux)