みらいテックラボ

音声・画像認識や機械学習など, 週末プログラマである管理人が興味のある技術の紹介や実際にトライしてみた様子などメモしていく.

PySide2とjupyterは相性よくない?

Python機械学習を使ったデモを作成しようと, GUI作成のためにPySide2をインストールしたところ, 少しハマったので対処方法をメモしておく.


1. 開発環境
まず, ハマった環境ですが, Ubuntu 20.04上にminicondaを使ってPyTorch開発の仮想環境を構築していた.
仮想環境にインストールしていたのは, Deep Learning開発に使用する一般的なモジュール.

  • PyTorch
  • torchvision
  • Jupyter
  • NumPy
  • Pandas
  • scikit-learn
  • Pillow
  • opencv-contrib-python
  • matplotlib

など,
そこへ, pipでPySide2をインストール.


2. 不具合内容
PySide2を使って, まずは簡単なテストプログラムを作成し, 動作させたところ, エラーが発生した.
[コード]

from PySide2.QtWidgets import *

# メインウィンドウ
class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(100, 100, 320, 240)
        label = QLabel('Hello World!!', self)
        
# アプリの実行と終了
app = QApplication()
window = MainWindow()
window.show()
app.exec_()

これを実行すると, 以下のようなエラーメッセージが表示された.

(pytorch) aska@ubuntu:~/demo$ python test.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, minimal, minimalegl, offscreen, vnc, xcb.

中止 (コアダンプ)


3. 原因と対処方法
エラーメッセージをググると, "QtとOpenCVは相性よくない"とのことで, opencv-python-headlessを使えといった記事[1]や特定のバージョンのOpenCV使えといった記事[2]が見受けられる.
そこで, まずはOpenCVをuninstallしてみたが, 症状は同じ.

そこで, 別途PySide2のみインストールした仮想環境を構築したところ, こちらは問題なく動作していることを確認.
今後のこともあるので, 何が悪さしてるか順次モジュールを追加したところ, どうもcondaでjupyterをインストールすると, jupyterもしくは一緒にインストールされる何かのパッケージとの相性が悪いことが判明した.

さらに調べてみると, 結局PySide2をpipでインストール, jupyterをcondaでインストールと, pipとcondaを混在させてしまったところが原因でした.
PySide2とjupyterを両方ともpipのみ, あるいはcondaのみでインストールすれば問題ないことも確認できた.

ということで, ついついやってしまうpipとcondaの混在. 皆さんもご注意を...

----
[1] QtとOpenCVの両方をインストールするとエラーが発生する[Python]| n++
[2] qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found. in ubuntu 20.04