PyQt5をwsl2で使おうとしたらトラブったので備忘録.
日本語の記事は1つだけapt installしたら解決すると言っているがしなかったので.
前提
- PyQt5を使いたいです
- ここでの環境はwsl2上でのUbuntu18.04ですが,Ubuntuなら共通のはずです
- wsl(2)のGUI環境は構築済みとします.Xserver入れるとか.
- もしここ知りたい方がいたら WSL2の導入とGUI環境の構築とsshfsしたものもgnome-openしたい!! も併せてご覧ください.
トラブル
$ main.py
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" 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
いろいろな日本語ページに書いてあること
sudo apt install libxkbcommon-x11-0
これだけではだめだった.これも必要です!
解決手段
まず,libqeglfs.so
のありかを見つける.
find / -name libqeglfs.so
など.だけどこれ多分実行時間がしんどいかもしれない.
例えば
export QT_DEBUG_PLUGINS=1
としてデバッグモードとし,目的のPythonファイルを実行すると
Got keys from plugin meta data ("xcb")
QFactoryLoader::QFactoryLoader() checking directory path "/path/to/python/bin/platforms" ...
Cannot load library /path/to/python/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so: (libxcb-icccm.so.4: cannot open shared object file: No such file or directory)
QLibraryPrivate::loadPlugin failed on "/path/to/python/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so" : "Cannot load library /home/path/to/python/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so: (libxcb-icccm.so.4: cannot open shared object file: No such file or directory)"
みたいなものが最後の方に出てきます(Pythonへのパスは path/to/python
に書き換えています).
これが見つかったら,
https://forum.qt.io/topic/115732/could-not-load-the-qt-platform-plugin-xcb-in-even-though-it-was-found
などにあるように,
ldd /path/to/python/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so
をしてやるとよいです.見にくかったら|grep "not found"
を追加してやってもよいです.
これで足りないものがわかるので,例えば自分は
$ ldd /path/to/python/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so | grep "not found"
libxcb-icccm.so.4 => not found
libxcb-image.so.0 => not found
libxcb-keysyms.so.1 => not found
libxcb-render-util.so.0 => not found
libxcb-xinerama.so.0 => not found
libxcb-icccm.so.4 => not found
libxcb-image.so.0 => not found
libxcb-keysyms.so.1 => not found
libxcb-render-util.so.0 => not found
libxcb-xinerama.so.0 => not found
だったので,
sudo apt install libxkbcommon-x11-0
sudo apt install libxcb-icccm4
sudo apt install libxcb-image0
sudo apt install libxcb-keysyms1
sudo apt install libxcb-render-util0
sudo apt install libxcb-xinerama0
をしたら動くようになりました.めでたしめでたし.