无法找到或加载Qt平台插件“xcb”

32

在我的操作系统(Linux Mint Debian Edition 2)上,除了由apt安装的系统Python(/usr/bin/python)之外,我还安装了anaconda。但是,当我使用anaconda的Python运行以下代码时遇到了问题。

# test.py
import matplotlib.pyplot as plt
import numpy as np
x = np.array([0, 1])
plt.scatter(x, x)
plt.show()

错误信息为:

  

应用程序启动失败,因为它找不到或加载不了 Qt 平台插件“xcb”。

     

重新安装该应用程序可能会解决此问题。

     

异常终止

但是如果我使用系统自带的 python,即/usr/bin/python test.py,它可以正常工作。

然后我尝试了系统和 Anaconda 的 ipython,结果与之前相同:Anaconda 的 ipython 内核崩溃了。

我尝试在代码中加入 ipython 魔术命令 %matplotlib inline,Anaconda 的 ipython 现在可以正常工作。但是如果我把 %matplotlib inline 替换为 %pylab,Anaconda 的 ipython 又会崩溃。

注意:我使用的是 Python 2.7。系统的 ipython 版本为 2.3,Anaconda 的 ipython 版本为 3.2。


我也尝试安装xcbconda install --channel https://conda.anaconda.org/jdreaver libxcb,但问题仍然存在。 - Yantao Xie
2
根本问题可能是系统QT和Anaconda QT不匹配,插件系统(通过环境变量工作)发生冲突。此处的 https://gist.github.com/tacaswell/1d36a5ecc372f65e9f46 中的激活脚本可能会有所帮助。当我使用KDE桌面时,我经常使用它。 - tacaswell
我仔细阅读了conda文档。并且我更改了我的环境设置,以避免将系统安装或pip安装的Python包与anaconda包混合在一起。然后我重新安装了anaconda。我发现问题已经消失了。 - Yantao Xie
@tcaswell 我已经阅读了脚本并尝试了它,但没有任何效果。 - Yantao Xie
6个回答

35
为了解决这个问题,我在顶部添加了以下内容:
import matplotlib
matplotlib.use('Agg')

我有一个CentOS7,Anaconda3-4.5.0,python3.5,pyqt版本为5.6.0和qt版本为5.6.0。

如果您想在Tkinter窗口中使用绘图进行可视化,则请使用:

matplotlib.use('TkAgg')

3
当一个Qt应用程序调用使用matplotlib的Python脚本时,此解决方案可行。 - Alechan
对我来说似乎可以工作,我正在尝试通过ssh会话生成一些图形。仅使用plt.savefig(),而不是imshow()或show()。 - Ketil Malde

20

同样的问题出现在Linux Mint 17 64位系统上。经过4小时的网络搜索后,问题得到解决!你需要在终端中从文件夹/anaconda2/bin执行这些命令。

sudo ./conda remove qt
sudo ./conda remove pyqt
sudo ./conda install qt
sudo ./conda install pyqt

希望能对您有所帮助!


2
尝试在Python 2.7的Anaconda 4.3.21上进行此操作后,它卸载了各种重要的软件包(jupytermatplotlib等),而不仅仅是qt。这个解决方案对我没有用。我正在尝试在Rstudio上运行它,但是我收到了相同的错误消息:“此应用程序无法启动,因为它找不到或加载Qt平台插件“ xcb”。” - Luís Telles
我已经重新启动了计算机,重新安装了软件包,但问题仍然存在。我甚至安装了xcb和libxcb1 libxcb-util1 libxcb-util-dev,但仍然没有任何改变。这个问题出现在Anaconda和Ubuntu 16.04 4.10.0-21-generic python上。 - Daniel Colceag
这对我有用,但只有在我跟进 ./pip uninstall matplotlib; ./pip install matplotlib 后才有效。 - R.M.

8
我在使用Ubuntu 16.04和anaconda 4.3.17 (Python 2.7)时遇到了这个问题,与anaconda安装Qt 5.6版本不匹配有关,而我的系统Qt库为5.5版本。
一个快速的解决方法是通过设置LD_LIBRARY_PATH,确保Anaconda库在系统库之前。
export LD_LIBRARY_PATH=$HOME/anaconda2/lib:$LD_LIBRARY_PATH

很遗憾,这会破坏使用Qt 5.5的其他程序,因此您只能在完全使用Anaconda Python的情况下使用它,例如,如果您使用--pylab启动ipython会话。
我通过查看libxqcb.so的链接方式发现了这个问题: ldd $ HOME / anaconda2 / plugins / platforms / libqxcb.so
它报告了以下错误:
./libqxcb.so: /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5: version `Qt_5_PRIVATE_API' not found (required by ./libqxcb.so)
./libqxcb.so: /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5: version `Qt_5' not found (required by ./libqxcb.so)
./libqxcb.so: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5' not found (required by ./libqxcb.so)
./libqxcb.so: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.6' not found (required by ./libqxcb.so)

错误信息显示找不到Qt_5.6,这是Anaconda的版本。我系统上的版本是5.5,通过查看此命令生成的文件名得知:
ls /usr/lib/x86_64-linux-gnu/libQt*

这个解决方案是临时的吗?我的意思是,在终端上简单地运行export LD_LIBRARY_PATH=$HOME/anaconda2/lib:$LD_LIBRARY_PATH,当我关闭终端时,变量LD_LIBRARY_PATH会恢复正常,而不会影响其他应用程序的风险吗? - Luís Telles
我使用这个解决方案来启动PyCharm或IPython - 我编写了一个脚本,首先像上面那样导出LD_LIBRARY_PATH,然后执行ipython --pylab,另一个脚本也是同样的操作,只不过是针对PyCharm。如果我从命令行运行一个使用matplotlib绘图的Python脚本,在这种情况下,我也会像上面那样导出LD_LIBRARY_PATH。我不希望非Python应用程序使用Anaconda的Qt版本。 - goats

6
这也可能会发生在使用SSH会话连接到一些使用X11图形库的软件时,就像我最近发现的那样。
当尝试在图形用户界面中绘制图像时,出现了问题,使用以下命令:
cv2.imshow() 

或者
plot.show()

在这种情况下,您应该使用ssh -XY或考虑保存到文件中,例如
cv2.imwrite('file.png')

或者

plt.savefig('file.png')

在使用一个原本与Jupyter笔记本一起使用的深度神经网络时,我遇到了这个问题。当将图像写入文件而不是显示时,代码通过多个ssh隧道运行却没有报告xcb和Qt错误。

顺便说一下,无论安装了哪个版本的Qt4或Qt5,它仍然会失败并提示相同的错误消息。


我在我的代码中有这一部分 cv2.imshow('image', image), cv2.destroyAllWindows() 然后我在crontab中运行我的代码,得到了上面的错误。只有你的评论是有用的。 - Rivered

1

我必须升级几个Python包以使其正常工作。 特别是:

pip3 install --upgrade pyside2 pyqt5


0
我遇到了类似的问题。使用conda卸载matplotlib,然后用pip重新安装解决了这个问题。我怀疑这可能与使用pip安装的opencv版本有关,它们都试图使用qt后端,但我不能确定。
conda uninstall matplotlib
pip install matplotlib

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