pyqt5报错:qt.qpa.plugin: Could not find the Qt platform plugin “xcb“(已解决)

news/2025/3/30 5:29:18/

我在使用pyqt库的时候报错:

qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in \
"/mnt/private_disk/anaconda3/envs/aot-manip/lib/python3.8/site-packages/PyQt5/Qt5/plugins/platforms" 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.

启动调试模式:export QT_DEBUG_PLUGINS=1,我发现这么一段报错:

QFactoryLoader::QFactoryLoader() checking directory path \
"/mnt/private_disk/anaconda3/envs/aot-manip/bin/platforms" ...
Cannot load library .../libqxcb.so: (/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5: undefined symbol: \
_ZN23QPlatformVulkanInstance22presentAboutToBeQueuedEP7QWindow, version Qt_5_PRIVATE_API)

这个undefined symbol的问题我之前也遇到过!

经过多番询问AI,发现了问题的缘由:

根据你的调试输出,核心问题在于 libQt5XcbQpa.so.5 中存在未定义的符号
_ZN23QPlatformVulkanInstance22presentAboutToBeQueuedEP7QWindow,这表明 ​Qt 库版本存在不兼容或依赖链断裂。

于是通过 ldd /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqxcb.so 查看依赖的 Qt 库路径。我发现依赖的路径鱼龙混杂,有和anaconda相关的,有和coppeliaSim相关的,有在/usr/lib路径下的。

这和我之前使用CoppeliaSim时配置环境的遗留问题相关,执行vim ~/.bashrc,发现了之前的配置

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$COPPELIASIM_ROOT
export QT_QPA_PLATFORM_PLUGIN_PATH=$COPPELIASIM_ROOT
export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH

解决方案比较简单,我首先注释掉了上面三行,不让pyqt去找系统目录下的LD_LIBRARY_PATHQT_QPA_PLATFORM_PLUGIN_PATH
然后在python代码中设置QT_QPA_PLATFORM_PLUGIN_PATH:

python">os.environ.update({"QT_QPA_PLATFORM_PLUGIN_PATH": \
"/mnt/private_disk/anaconda3/envs/aot-manip/lib/python3.8/site-packages/PyQt5/Qt5/plugins/platforms"})

网上还有一种配置方法export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms,据我猜测,这是使用c++开发Qt的配置方案,而我们用pip安装好的pyqt是自给自足的,不需要suda apt install Qt相关的库。


http://www.ppmy.cn/news/1583410.html

相关文章

用Python爬取图片的两种姿势:从静态到动态的完整攻略(二)

一、前言 在前文中,我们详细介绍了 BeautifulSoup 这一工具。在处理静态数据爬取任务时,它确实展现出了快捷、方便的特性,能够高效地完成相关工作。然而,当前市面上诸多规范运营的网站,为了保障自身数据安全与运营秩序,纷纷采取了一系列反爬虫措施。 这些措施不仅涵盖了…

探索未来世界:元宇宙、虚拟现实与增强现实的交互新体验

在数字化浪潮不断推进的今天,元宇宙、虚拟现实(VR)和增强现实(AR)正以其独特的魅力吸引着全球的关注。这些技术不仅颠覆了传统的交互方式,还为游戏、教育、社交和商业等领域带来了全新的体验和无限可能。本…

C++语法学习的主要内容

科技特长生方向,主要学习的内容为 一,《C语法》 二,《数据结构》 三,《算法》 四,《计算机基础知识》 五,《初高中的数学知识》 其中,《C语法》学习的主要内容如下: 1,cout输出语句和键盘…

保姆级教程搭建企业级智能体+私有知识库,Dify+ollama,Linux版

介绍 目前,AI Agent智能体已经被许多公司广泛应用,同时智能体借助私有知识库的加成,使原来知识面并不特别充分的大模型更聪明。如今特别是在医疗,医药,政企等数据保密程度高的行业,部署自己的私有知识库更…

SQL注入简介

SQL注入初步了解 什么是SQL注入SQL注入原理SQL注入方法确定三件事:方法 SQL注入危害 什么是SQL注入 SQL 注入(SQL Injection)是一种常见的 Web 安全漏洞,攻击者通过构造恶意的 SQL 查询语句,欺骗后端数据库执行非预期…

亮相AWE2025,MOVA以科技重塑生活,以美学沟通世界

3月20日-23日,全球三大消费电子盛会之一的中国家电消费电子博览会(AWE2025)在上海新国际展览中心举行。 据「TMT星球」了解,全球高端智能家电品牌MOVA携智慧生活全品类重磅亮相,带来了包括扫地机、洗地机、吸尘器、厨…

LeetCode 86 Partition List 分区链表 Java

题目:给定一串链表的起始节点head和一个数值x,将链表中所有比X值小的节点放在比X值大的节点的前面,除此之外,要求保持原有的节点排序不变。 例子: 举例1: 输入 :head [1,4,3,2,5,2], x 3; …

FreeSWITCH入门到精通系列(五):FreeSWITCH 脚本与自动化

FreeSWITCH 脚本与自动化 FreeSWITCH 提供了多种脚本语言支持,如 Lua、JavaScript、Python、Perl 等,允许开发者自动化拨号、通话控制、事件处理等操作。本文将介绍 FreeSWITCH 支持的脚本语言、如何使用 Lua 进行自动化,并提供一个完整的 自…