質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

4回答

3876閲覧

PyQt5のエラー文について教えてください

pythonnoob1

総合スコア18

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

1グッド

0クリップ

投稿2020/06/19 10:56

編集2020/06/19 13:28

環境

Raspberry Pi 3 B
python 3.7.2
Raspbian stretch

初めに

使っていたラズパイのデータが破損してしまったので最初から環境構築をしなくてはならなくなってしまいました。

質問内容

先ほどPyQt5をインストールし、動作確認テストを行いました。
↓動作確認用【GUI_test_1.py】

python

1 2import sys 3 4from PyQt5.QtWidgets import QWidget, QApplication 5 6 7class MyWindow(QWidget): # QWidgetクラスを使用します。 8 9 def __init__(self): 10 super().__init__() 11 self.title = 'ウィンドウだけだよウィンドウ' 12 self.width = 500 13 self.height = 400 14 self.initUI() 15 16 def initUI(self): 17 self.setWindowTitle(self.title) 18 self.setGeometry(0, 0, self.width, self.height) 19 self.show() 20 21 22 23 24 25if __name__ == "__main__": 26 app = QApplication(sys.argv) 27 gui = MyWindow() 28 sys.exit(app.exec_())

こちらはエラーなくGUIを作成することが出来ました。

次に、ラズパイのファイルデータが破損する前に行っていた「自動ドアの制御コード」を打ってみました。
↓自動ドアの制御コード【autodoor3.py】

python

1 2import sys 3from PyQt5.QtWidgets import * 4from PyQt5.QtGui import * 5from PyQt5.QtCore import * 6import subprocess 7import time 8import numpy as np 9import cv2 10import RPi.GPIO as GPIO 11 12 13Shoden_PIN=22 14 15Motor_PIN_1=24 16Motor_PIN_2=25 17 18Reed_PIN_1=17 19Reed_PIN_2=27 20 21GPIO.setmode(GPIO.BCM) 22GPIO.setup(Shoden_PIN, GPIO.IN) 23GPIO.setup(Reed_PIN_1, GPIO.IN) 24GPIO.setup(Reed_PIN_2, GPIO.IN) 25 26def setMotor(): 27 GPIO.setmode(GPIO.BCM) 28 GPIO.setup(Motor_PIN_1, GPIO.OUT) 29 GPIO.setup(Motor_PIN_2, GPIO.OUT) 30 31def Motor_Forward(): 32 GPIO.output(Motor_PIN_1, 1) 33 GPIO.output(Motor_PIN_2, 0) 34 35def Motor_Backward(): 36 GPIO.output(Motor_PIN_1, 0) 37 GPIO.output(Motor_PIN_2, 1) 38 39def Motor_Stop(): 40 GPIO.output(Motor_PIN_1, 0) 41 GPIO.output(Motor_PIN_2, 0) 42 43def Clean(): 44 GPIO.cleanup(24) 45 GPIO.cleanup(25) 46 47 48class Tab1Widget(QWidget): 49 50 def __init__(self, parent=None): 51 super().__init__(parent) 52 53 self.qt_thread = None 54 #self.running = False 55 self.title = "GUI test" 56 self.left = 10 57 self.top = 10 58 self.width = 640 59 self.height = 480 60 self.initUI() 61 self.counter = 0 62 63 def initUI(self): 64 65 66 #super(Tab1Widget, self).__init__() 67 68 btn1 = self.auto_button = QPushButton("自動", self) 69 btn2 = self.stop_button = QPushButton("停止", self) 70 71 btn1.clicked.connect(self.auto ) 72 btn2.clicked.connect(self.stop ) 73 74 self.textbox4 = QLineEdit(self) 75 self.textbox5 = QLineEdit(self) 76 77 78 label3 = QLabel("自動ドア") 79 label4 = QLabel("ドアの状態") 80 label5 = QLabel("モーター") 81 82 layoutA = QGridLayout() 83 layoutA.addWidget(label4,0,0) 84 layoutA.addWidget(self.textbox4,0,1) 85 layoutA.addWidget(label5,1,0) 86 layoutA.addWidget(self.textbox5,1,1) 87 layoutA.addWidget(btn1,2,0) 88 layoutA.addWidget(btn2,2,1) 89 90 layoutB = QVBoxLayout() 91 layoutB.addWidget(label3) 92 layoutB.addLayout(layoutA) 93 94 self.setLayout(layoutB) 95 96 self.show() 97 98 def closeEvent(self, event): 99 self.stop() 100 101 if self.qt_thread: 102 self.qt_thread.wait(2000) 103 104 super().closeEvent(event) 105 106 def stop(self): 107 if self.qt_thread: 108 self.qt_thread.requestInterruption() 109 110 111 112 def String(self, alpha): 113 self.textbox4.setText("{}".format(alpha)) 114 115 def Motor(self, beta): 116 self.textbox5.setText("{}".format(beta)) 117 118 119 def auto(self): 120 121 class MyQtThread(QThread): 122 123 sendString = pyqtSignal(str) 124 sendMotor = pyqtSignal(str) 125 126 def run(self): 127 while 1: 128 motor="" 129 self.sendMotor.emit(motor) 130 door="" 131 self.sendString.emit(door) 132 self.sleep(0.1) 133 134 if self.isInterruptionRequested(): 135 #Cleanup() 136 motor="Cleanup" 137 self.sendMotor.emit(motor) 138 #self.sleep(1) 139 break 140 141 while GPIO.input(Shoden_PIN)!=GPIO.HIGH: #物体検知 142 if self.isInterruptionRequested(): 143 #Cleanup() 144 motor="Cleanup" 145 self.sendMotor.emit(motor) 146 #self.sleep(1) 147 return 148 time.sleep(0.5) 149 150 #setMotor() 151 #Motor_Forward() #ドアが開く 152 motor="FORWARD" 153 self.sendMotor.emit(motor) 154 door="OPENED" 155 self.sendString.emit(door) 156 #self.sleep(1) 157 158 while GPIO.input(Reed_PIN_2)!=GPIO.HIGH: #ドアが完全に開く 159 if self.isInterruptionRequested(): 160 #Cleanup() 161 motor="Cleanup" 162 self.sendMotor.emit(motor) 163 #self.sleep(1) 164 return 165 time.sleep(0.5) 166 167 #Motor_Stop() 168 #time.sleep(0.5) 169 motor="STOP" 170 self.sendMotor.emit(motor) 171 self.sleep(1) 172 173 #Motor_Backward() #ドアが閉まる 174 motor="BACKWARD" 175 self.sendMotor.emit(motor) 176 #self.sleep(1) 177 178 while GPIO.input(Reed_PIN_1)!=GPIO.HIGH: #ドアが完全に閉まる 179 door="CLOSED" 180 self.sendString.emit(door) 181 if self.isInterruptionRequested(): 182 #Cleanup() 183 motor="Cleanup" 184 self.sendMotor.emit(motor) 185 #self.sleep(1) 186 return 187 time.sleep(0.5) 188 189 door="CLOSED" 190 self.sendString.emit(door) 191 #Motor_Stop() 192 #time.sleep(0.5) 193 motor="STOP" 194 self.sendMotor.emit(motor) 195 door="CLOSED" 196 self.sendString.emit(door) 197 self.sleep(1) 198 199 200 201 202 203 204 205 206 207 208 thread = self.qt_thread = MyQtThread() 209 210 thread.sendString.connect(self.String) 211 thread.sendMotor.connect(self.Motor) 212 213 214 self.stop_button.clicked.connect(self.stop) 215 216 thread.finished.connect(lambda: print("Qt Thread Finished")) 217 thread.start() 218 219 220if __name__ == "__main__": 221 app = QApplication(sys.argv) 222 ex = Tab1Widget() 223 sys.exit(app.exec_())

これを作動させたところ
このようなエラー文(?)が出てきました。

とてもタイピングで写せるようなものではないので、画像にて貼らせていただきます。
エラー画像1
エラー画像2
エラー画像3

何が起こっているのでしょうか?

teamikl👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Mashiro

2020/06/19 11:08

ldd --version を実行してみてください。
pythonnoob1

2020/06/19 11:56

ldd (Debian GLIBC 2.24-11+deg9u4) 2.24 copyright (c) 2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 作者 Roland McGrath および Ulrich Drepper。 と出てきました。
guest

回答4

0

ラズベリーパイ(Raspbian)ということなので、推奨する方法を書きます。

apt-getで入るものは全てapt-getを使え

です。PyQtもnumpyも、です。

terminal

1sudo apt-get install python3-pyqt5 2sudo apt-get install python3-numpy 3...

pipで入れると碌なことがありません。またGLIBCを再コンパイルするのは狂気の沙汰です(この狂気は大好きですが、動かないことを楽しめる人にしか勧めません)。

投稿2020/06/19 14:26

yymmt

総合スコア1615

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pythonnoob1

2020/06/19 14:44

一度、マイクロチップをフォーマットして一から環境構築したほうがいいんですかね?
yymmt

2020/06/19 14:56

それが出来るのであればそれが一番です。私ならSDカードを買ってきます。
pythonnoob1

2020/06/19 16:42

今SDカードを買うほどの余裕がありません(泣 フォーマットします、、、
pythonnoob1

2020/06/19 17:01

大変申し訳ありません。 今、思いついたのですが、他の環境構築済みのラズパイのマイクロSDをコピーして、使うことはできるのでしょうか?
yymmt

2020/06/19 23:09

ddコマンド等イメージごと複製するものを使えば可能です。もちろん他の環境と同じアーキテクチャであることが前提です。逆に苦労して環境構築したらddを使ってハードディスク上にイメージのバックアップするのが良いでしょう。
pythonnoob1

2020/06/21 12:52

今回は親切なアドバイスを頂きまして、誠に有難うございます。 まだ、エラーを楽しめるほど学がありませんので、SDカードをフォーマットして raspbian buster を入れました。 驚くほどすんなりと、OpenCV、PyQt5をインストールすることが出来ました。 この度は誠に有難うございました。
guest

0

ベストアンサー

エラーメッセージで

libm.so.6: version GLIBC_2.27 not found

となっていて、GLIBCが2.27である必要があります。
一方で、OSに入っているのは2.24です。
なので、glibc 2.27をコンパイルしてインストールしてください。

ちなみにいまらずぱいに入ってるOSがおそらくRaspbian Stretchなはずなので、Raspbian Busterに入れ替えたほうが早そう・・・

投稿2020/06/19 13:15

Mashiro

総合スコア654

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pythonnoob1

2020/06/19 13:54

大変初心者ながらの質問申し訳ありません。 コンパイルするとは、どういうことをするのでしょうか? 具体的にどんなコマンドを打てばよいのでしょうか?
pythonnoob1

2020/06/19 14:05

ありがとうございます。 早速試してみます。
pythonnoob1

2020/06/19 14:18

大変申し訳ありません そもそも cd ~/src/ で そのようなファイルやディレクトリはありませんと言われます
Mashiro

2020/06/19 14:24

mkdir src で作ればいいかと。 あくまで参考なので、各ステップでどういう意味で実行しているのかを調べながらやるとよりいいかなー
pythonnoob1

2020/06/19 15:04

ありがとうございます。 今まで、サイトに書いてあることをそのまま写していただけなので、これから考えるようにします。
pythonnoob1

2020/06/19 16:44

ここまで教えてくださり大変申し訳ありませんが、一度フォーマットして、また、初めからやり直したいと思います。 また、分からないことが出たときはご指導のほどよろしくお願いします。
pythonnoob1

2020/06/19 17:03

大変申し訳ありません。 今、思いついたのですが、他の環境構築済みのラズパイのマイクロSDをコピーして、使うことはできるのでしょうか?
pythonnoob1

2020/06/21 12:42

Raspbian buster に変えました。そしたら、すんなりとPyQt5、OpenCVが入り、無事環境構築が出来ました。長い間、大変ありがとうございました。
guest

0

エラーの内容自体は numpy のインストールに問題があるようですけど、
解決策は他の方が提示してくれているようなので、他に

個人的に気になった点:

  • cv2
  • numpy

の2点は必要なのでしょうか?

後々必要なのかも知れませんが、確認作業としては、
まず、「PyQt5 の動作確認」「numpyの動作確認」「OpenCVの動作確認」
と個別に確認したほうが良いです。

  • 不要なモジュールのインポートをなくして、PyQt5 のみの動作確認をしましょう。

→ 最初のコードは動作してるようなので、ここはクリア

  • その上で numpy が必要なら、numpy のみを import して問題が起こるコードを書いて

質問された方が良いと思います。質問のタグも「numpy」が適切です。


エラーログの記録は、source コマンドや、
標準エラーのリダイレクト &> を使うと良いですよ。

sourceコマンドは、インストール作業の記録を取るのにもおすすめです。
もう一度環境構築となった時に役立ちます。

投稿2020/06/19 15:57

teamikl

総合スコア8664

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pythonnoob1

2020/06/19 16:41

回答ありがとうございます! 一度、フォーマットして初めからやり直します!
pythonnoob1

2020/06/19 17:02

大変申し訳ありません。 今、思いついたのですが、他の環境構築済みのラズパイのマイクロSDをコピーして、使うことはできるのでしょうか?
pythonnoob1

2020/06/21 12:47

前回に引き続き、今回まで助けていただき本当にありがとうございます。 Raspbian buster にして、OpenCV、PyQt5をインストールしたら無事環境構築が出来ました。 本当にありがとうございました。
teamikl

2020/06/21 13:01

openCV や numpy は、PyQtの動作確認には不要なのでは?という意図だったのだけど、 後々必要になるとしてもその場合は、PyQtは外してOpenCVや numpy単体で動作確認した方が良いですよ。 現状のコードでは import してるだけで全く使われてません、不要な依存モジュールになってます。 >無事環境構築が出来ました。 とりあえず、再構築できてよかったです。 次又同じような状況が発生した時の為に、作業ログは取っておきましょう。 (端末での作業はsourceコマンドで記録する習慣をつけると便利)
pythonnoob1

2020/06/21 13:32

ありがとうございます。 OpenCVもnumpyも後々必要になってくるものなのでインストールいたしました。 各モジュールインストール後 import インストールしたモジュール で確認しエラーは起こりませんでした。 今後も、モジュールをインストールするときはきちんと確かめるようにいたします。
guest

0

ミスです。
申し訳ありません。

投稿2020/06/19 17:02

編集2020/06/19 17:39
pythonnoob1

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問