やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

ラズパイでPySimpleGUIQtが使えなかった

 原因はpip install PySide2できないため。PySide2はaptでもインストールできるが、それではPySimpleGUIQtから参照できずエラーになった。

成果物

概要

 それぞれのライブラリは以下のように下のものを参照している。

 だがRaspberry PIpip install PySide2できないため、PySimpleGUIQtが実行できなかった。

Qtのインストール

 setup.sh参照。おもなコマンドは以下。

sudo apt update
sudo apt -y install build-essential git cmake qt-sdk libgl1-mesa-dev qt5-default libxml2 libxslt1.1 python-dev qtbase5-dev
sudo apt -y install qttools5-dev-tools libqt5clucene5 libqt5concurrent5 libqt5core5a libqt5dbus5 libqt5designer5 libqt5designercomponents5 libqt5feedback5 libqt5gui5 libqt5help5 libqt5multimedia5 libqt5network5 libqt5opengl5 libqt5opengl5-dev libqt5organizer5 libqt5positioning5 libqt5printsupport5 libqt5qml5 libqt5quick5 libqt5quickwidgets5 libqt5script5 libqt5scripttools5 libqt5sql5 libqt5sql5-sqlite libqt5svg5 libqt5test5 libqt5webkit5 libqt5widgets5 libqt5xml5 libqt5xmlpatterns5 libqt5xmlpatterns5-dev 

 以下情報源。

ラズパイでpip install PySide2できない

 ラズパイではpip install PySide2がエラーになってしまう。原因はPySide2のARM版ビルドがないから。

 Raspberry PIのCPUはARMアーキテクチャである。なのにPySide2はARM用にビルドされたファイルが存在しない。そのせいでラズパイではpip install PySide2でエラーになるらしい。

Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting PySide2
  Could not find a version that satisfies the requirement PySide2 (from versions: )
No matching distribution found for PySide2

 情報源は以下URL。

 補足。実行ファイルはCPUアーキテクチャごとに異なるバイナリが必要になる。CPUに合わせたバイナリ実行ファイルが必要だ。ところがPySide2にはARM用バイナリがない。そのためARMのCPUをもったラズパイでpip install PySide2を実行するとエラーになってしまう。

ラズパイのaptでPySide2をインストールする

 ラズパイではpipでPySide2をインストールできない。それは先述のとおり。しかし、aptでインストールすることはできるようだ。詳細はsetup.sh参照。コードにすると以下。

sudo apt -y install python3-pyside2.qt3dcore python3-pyside2.qt3dinput python3-pyside2.qt3dlogic python3-pyside2.qt3drender python3-pyside2.qtcharts python3-pyside2.qtconcurrent python3-pyside2.qtcore python3-pyside2.qtgui python3-pyside2.qthelp python3-pyside2.qtlocation python3-pyside2.qtmultimedia python3-pyside2.qtmultimediawidgets python3-pyside2.qtnetwork python3-pyside2.qtopengl python3-pyside2.qtpositioning python3-pyside2.qtprintsupport python3-pyside2.qtqml python3-pyside2.qtquick python3-pyside2.qtquickwidgets python3-pyside2.qtscript python3-pyside2.qtscripttools python3-pyside2.qtsensors python3-pyside2.qtsql python3-pyside2.qtsvg python3-pyside2.qttest python3-pyside2.qttexttospeech python3-pyside2.qtuitools python3-pyside2.qtwebchannel python3-pyside2.qtwebsockets python3-pyside2.qtwidgets python3-pyside2.qtx11extras python3-pyside2.qtxml python3-pyside2.qtxmlpatterns python3-pyside2uic

aptでインストールしたPySide2ではPySimpleGUIQtから参照できない

 残念ながらaptでインストールしたPySide2では、PySimpleGUIQtから参照できない。

 PySimpleGUIQtからPySide2を参照したコードrun.pyを書いて実行すると、以下のようなエラーになってしまう。

run.py

import PySimpleGUIQt as sg
...
ImportError: No module named PySide2.QtWidgets

 ただし、PySide2を直接参照するコードps2.pyを書いて実行すると成功する。

ps2.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

from sys import exit, argv
from PySide2.QtWidgets import QApplication, QLabel

def Main():
    app = QApplication(argv)
    label = QLabel("Hello World")
    label.show()
    exit(app.exec_())

if __name__ == '__main__':
    Main()

 このことから、PySimpleGUIQtからPySide2を参照する点に問題があるとわかる。その原因は、pipでPySide2をインストールができず、やむなくaptでインストールしたせいだろう。

 PySimpleGUIQtの実装はわからないが、PySimpleGUIQtはaptでなくpipでインストールしたPySide2しか参照できない。だからそれができないラズパイではPySimpleGUIQtが使えない。

補足

 python -m venv ...で仮想環境をつくり有効化したときもPySide2が参照できなくなってしまう。

ModuleNotFoundError: No module named 'PySide2'

 きわめて限定的な状況でしか使えないようだ。これはあかん。

結論

 ラズパイではPySimpleGUIQtが使えない。理由はPySide2のARM用バイナリがないせいでPySimpleGUIQtがPySide2を参照できないため。

 おそらくPySimpleGUIQtでは、pipでインストールしたPySide2でないと参照できないのだろう。aptでしかインストールできないラズパイではPySimpleGUIQtからPySide2を参照できずエラーになってしまう。

所感

 4つあるうちの2つが実行できないことを確認できてしまった。これはひどい。期待はずれ。

API ラッパ元 実行できない理由
PySimpleGUI Tkinter 絵文字フォントがインストールされているとTkinterがエラーになって使えないため。
PySimpleGUIQt Qt pip install PySide2できないため。aptで入れたものは参照できなかった。
PySimpleGUIWx wxWidgets 未確認
PySimpleGUIWeb Remi 実行できた!

対象環境

$ uname -a
Linux raspberrypi 5.4.83-v7l+ #1379 SMP Mon Dec 14 13:11:54 GMT 2020 armv7l GNU/Linux