Raspbian stretch PyQt5 でウインドウを表示できなかった(ModuleNotFoundError: No module named 'PyQt5.sip')
PyQt5は使えませんでしたとさ……。今までの苦労は一体……。
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 2018-06-27
- Qt 5.7.1
- pyenv 1.2.8
2018-11-23時点。
インストール方法
上記をそのまま真似した。ただしバージョンが違う。
前回まで
- http://ytyaru.hatenablog.com/entry/2019/11/06/000000
- http://ytyaru.hatenablog.com/entry/2019/11/13/000000
- http://ytyaru.hatenablog.com/entry/2019/11/14/000000
- http://ytyaru.hatenablog.com/entry/2019/11/15/000000
- http://ytyaru.hatenablog.com/entry/2019/11/16/000000
- http://ytyaru.hatenablog.com/entry/2019/11/17/000000
- http://ytyaru.hatenablog.com/entry/2019/11/18/000000
手順
テストコードを実行する(失敗)
- テストコードを作成する
import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton if __name__ == '__main__': app = QApplication(sys.argv) window = QWidget() button = QPushButton('button', window) window.show() sys.exit(app.exec_())
- 実行する
(Qt) $ python /tmp/work/test.py
- エラー発生……
Traceback (most recent call last): File "/tmp/work/test.py", line 2, in <module> from PyQt5.QtWidgets import QApplication, QWidget, QPushButton ModuleNotFoundError: No module named 'PyQt5.sip'
- https://stackoverflow.com/questions/51324754/python-3-6-x-pyinstaller-gives-error-no-module-named-pyqt5-sip
- https://github.com/pyinstaller/pyinstaller/issues/3630
解決できず……。
解決を試みる
- PyQt5-sipのインストール
sip.so
,sip.pyi
のリンク- パス確認
- ファイル名変更
1. PyQt5-sipのインストール
それっぽいパッケージがある。
(Qt) $ pip search pyqt5 PyQt5-sip (4.19.13) - Python extension module support for PyQt5 ...
(Qt) $ pip install PyQt5-sip ... Could not find a version that satisfies the requirement PyQt5-sip (from versions: ) No matching distribution found for PyQt5-sip ...
インストールできなかった……。
2. sip.so
, sip.pyi
のリンク
ln -s /usr/local/lib/python3.6/site-packages/sip.so /Users/youruser/.pyenv/versions/electrum/lib/python3.6/site-packages/sip.so ln -s /usr/local/lib/python3.6/site-packages/sip.pyi /Users/youruser/.pyenv/versions/electrum/lib/python3.6/site-packages/sip.pyi
上記を自分の環境に合わせる。
- venv仮想環境にインストールしたSIP
- pyenvが参照するライブラリパス
- /home/pi/.pyenv/versions/3.7.1/lib/python3.7/site-packages
- (ここには
sip.so
,sip.pyi
ファイルが無かった)
- (ここには
- /home/pi/.pyenv/versions/3.7.1/lib/python3.7/site-packages
sip.so
, sip.pyi
ファイルのシンボリックリンクを作成する。
ln -s /home/pi/root/env/py/Qt/lib/python3.7/site-packages/sip.so /home/pi/.pyenv/versions/3.7.1/lib/python3.7/site-packages/sip.so ln -s /home/pi/root/env/py/Qt/lib/python3.7/site-packages/sip.pyi /home/pi/.pyenv/versions/3.7.1/lib/python3.7/site-packages/sip.pyi
再びテストコードを実行するも、同様のエラー……。
3. パス確認
(Qt) $ pyenv which sip /home/pi/root/env/py/Qt/bin/sip ````
$ pip show sip Name: sip Version: 4.19.13 Summary: None Home-page: None Author: None Author-email: None License: None Location: /home/pi/root/env/py/Qt/lib/python3.7/site-packages Requires: Required-by: You are using pip version 10.0.1, however version 18.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command.
(Qt) $ pip show PyQt5 Name: PyQt5 Version: 5.11.3 Summary: None Home-page: None Author: None Author-email: None License: None Location: /home/pi/root/env/py/Qt/lib/python3.7/site-packages Requires: Required-by:
Pythonのバージョンと参照パスを確認する。
$ python
import sys print(sys.version) 3.7.1 (default, Nov 23 2018, 11:16:04) [GCC 6.3.0 20170516] print(sys.path) ['', '/home/pi/.pyenv/versions/3.7.1/lib/python37.zip', '/home/pi/.pyenv/versions/3.7.1/lib/python3.7', '/home/pi/.pyenv/versions/3.7.1/lib/python3.7/lib-dynload', '/home/pi/root/env/py/Qt/lib/python3.7/site-packages']
* `pip show sip`の`Location`は`sys.path`に含まれているので問題なく参照されるはず * `sys.path`に`/home/pi/root/env/py/Qt/lib/python3.7/site-packages`が含まれることからシンボリックリンクを作成せずとも`sip.so`が参照できたはず 今一度エラー文言を確認する。
ModuleNotFoundError: No module named 'PyQt5.sip'
`sip`は問題ないが`PyQt5.sip`という名前が解決できない? テストコードには書いていないので、PyQt5内部で参照していると思われる。前回PyQt5をコンパイルしたときに作成されなかったのか? おそらくネット上の情報とはバージョンが違うことから、何かが変更されたのだろう。 ### 4. ファイル名変更 * [https://teratail.com/questions/131959:title] テストコードのファイル名を`test.py`にしていたけど、Pythonライブラリと同じらしいので`testQt.py`に変更した。再度テストコードを実行するも同様のエラー。
(Qt) $ python /tmp/work/testQt.py ... ModuleNotFoundError: No module named 'PyQt5.sip'
# 所感 動かせなかった……。最後の最後でやっぱりPythonの環境構築は罠だらけ。これだからPythonは嫌いよ。どうしたらいいの? もうPyQt5は諦めてC++で開発しよう……。