【问题标题】:Could not find or load the Qt platform plugin "xcb"无法找到或加载 Qt 平台插件“xcb”
【发布时间】:2016-01-08 04:48:57
【问题描述】:

在我的操作系统(Linux Mint Debian Edition 2)上,除了 apt 安装的系统 python(/usr/bin/python),我还安装了蟒蛇。但是我在使用 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,它可以正常工作。

然后我尝试了system和anaconda的ipython,结果和之前一样:anaconda ipython内核死了。

我尝试将 ipython 魔法 %matplotlib inline 添加到代码中,anaconda ipython 现在可以正常工作。但是如果我用%pylab替换%matplotlib inline,anaconda ipython又死了。

注意:我使用的是 python 2.7。 System ipython的版本是2.3,anaconda ipython的版本是3.2。

【问题讨论】:

  • 我也试过安装xcbconda install --channel https://conda.anaconda.org/jdreaver libxcb,但问题依旧。
  • 潜在问题可能是系统 Qt 和 anaconda Qt 不匹配,并且插件系统(通过 ENV 工作)正在交叉。 gist.github.com/tacaswell/1d36a5ecc372f65e9f46 的激活脚本可能会有所帮助。当我在 KDE 机器上时,我经常使用。
  • 我仔细阅读了conda doc。我更改了我的环境设置以避免将安装的 python 包系统或安装的 pip 与 anaconda 包混合。然后我重新安装anaconda。我发现问题正在消失。
  • @tcaswell 看了脚本试了一下,没有效果。

标签: python linux matplotlib ipython anaconda


【解决方案1】:

Linux Mint 17 64 位也有同样的问题。在网上搜索了4小时后解决了!您需要在终端上从文件夹 /anaconda2/bin 发出这些命令

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

希望对您有所帮助!

【讨论】:

  • 在使用 anaconda 4.3.21 尝试此操作后。对于 python 2.7,它卸载了各种重要的包(jupytermatplotlib 等),而不仅仅是qt。这个解决方案对我不起作用。我正在尝试在 Rstudio 上运行它,但我遇到了同样的错误 This application failed to start because it could not find or load the Qt platform plugin "xcb".
  • 我确实重新启动了,我确实重新安装了软件包,但还是一样。我什至安装了 xcb 和 libxcb1 libxcb-util1 libxcb-util-dev,仍然没有。Anaconda 和 Ubuntu 16.04 4.10.0-21-generic python 会发生这种情况。
  • 这对我有用,但只有在我用./pip uninstall matplotlib; ./pip install matplotlib跟进它之后
【解决方案2】:

我在使用 anaconda 4.3.17 (Python 2.7) 的 Ubuntu 16.04 上遇到了这个问题。问题源于安装了 Qt 5.6 版的 anaconda,而我的系统 Qt 库是 5.5 版。

一个快速的技巧是通过设置 LD_LIBRARY_PATH 来确保 Anaconda 库在您的系统库之前:

export LD_LIBRARY_PATH=$HOME/anaconda2/lib:$LD_LIBRARY_PATH

不幸的是,这会破坏其他使用 Qt 5.5 的程序,因此您只能在 100% 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 将恢复正常,不会影响其他应用程序?
  • 我使用这个解决方案来启动 pycharm 或 ipython - 我编写了一个脚本,首先如上所述导出 LD_LIBRARY_PATH,然后执行 ipython --pylab,以及另一个对 pycharm 执行相同操作的脚本。如果我从命令行运行一个在 matplotlib 中绘图的 python 脚本,我也会在这种情况下像上面那样导出 LD_LIBRARY_PATH。我不希望非 python 应用程序使用 anacona 的 Qt 版本。
【解决方案3】:

为了解决这个问题,我在顶部添加了:

import matplotlib
matplotlib.use('Agg')

我有一个 CentOS7、Anaconda3-4.5.0、python3.5 pyqt 5.6.0 版和 qt 5.6.0 版

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

matplotlib.use('TkAgg')

【讨论】:

  • 当 qt 应用程序调用使用 matplotlib 的 python 脚本时,此解决方案有效。
【解决方案4】:

当使用 ssh 会话 之类的东西连接到例如我最近发现的使用 X11 图形库的软件时,也会发生这种情况。

尝试在图形用户界面中绘制图像时会出现此问题,使用:

cv2.imshow() 

plot.show()

在这种情况下,您应该使用 ssh -XY 或者您应该考虑保存到文件中,例如

cv2.imwrite('file.png')

plt.savefig('file.png')

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

顺便说一句,安装 Qt4 或 Qt5 的哪个变体并不重要。它仍然失败并显示相同的错误消息。

【讨论】:

    【解决方案5】:

    我必须升级几个 python 包才能让它工作。特别是:

    pip3 install --upgrade pyside2 pyqt5

    【讨论】:

      最近更新 更多