我正在为我的开发设置一个 python3 虚拟环境,因此我远离包管理器 apt-install
$ python3 -m venv . # create my environment in my working directory
然后我激活了 venv 并安装了 pyqt5
$ source bin/activate
$ pip install PyQt5
我收到安装成功的通知,并且 PyQt5 和 PyQt5-Sip 出现在我的 pip 列表中
当我构建示例应用程序时收到错误:
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/path/to/venv/lib/python3.8/site-packages/PyQt5/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, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl, xcb.
Aborted (core dumped)
我导出了环境变量以进行调试
export QT_DEBUG_PLUGINS=1
我尝试再次运行我的应用程序,以下是我在链接器中得到的具体错误
QFactoryLoader::QFactoryLoader() looking at "/path/to/venv/lib/python3.8/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so"
Found metadata in lib /path/to/venv/lib/python3.8/site-packages/PyQt5/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
}
Got keys from plugin meta data ("xcb")
QFactoryLoader::QFactoryLoader() checking directory path "/usr/bin/platforms" ...
Cannot load library /path/to/venv/lib/python3.8/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so: (libxcb-xinerama.so.0: cannot open shared object file: No such file or directory)
这里重要的错误是
libxcb-xinerama.so.0: cannot open shared object file: No such file or directory
所以我深入研究了一下。我决定使用 ldd 命令来解析共享库依赖关系。
$ ldd /path/to/venv/lib/python3.8/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so
瞧瞧:
libxcb-xinerama.so.0 => not found
libxcb-xinerama.so.0 => not found
libqxcb 共享库依赖项列表中缺少这些共享库。我希望 pip 的安装会包含这些,但事实并非如此。我没有在任何地方找到解决此问题的方法,而且我找到的少量来源提到使用 apt-install 来解决这些问题。我不想改变我的系统,我更喜欢保持沙盒化。
我该怎么做才能修复这个依赖关系?
答案1
当我在 Ubuntu 20.04 上安装pyqt5
并使用(也会创建一个)时,发生了完全相同的问题。matplotlib
pipenv
venv
在我的系统上,通过安装缺失的,可以轻松解决这个问题libxcb-xinerama0
,使用apt
:
sudo apt install libxcb-xinerama0
答案2
我在 Ubuntu 18.04.3 上遇到了同样的问题。以下是我解决这个问题的方法。
使用 pip3 卸载 PyQt
pip3 uninstall pyqt5
并通过 apt-get 安装
sudo apt-get install python3-pyqt5
答案3
我也没有用 pip 找到它们。我认为你只能从源代码编译它(https://xorg.freedesktop.org/archive/individual/lib/libxcb-1.14.tar.xz)并链接到它,或者安装libxcb-xinerama0
。