라즈베리파이로 python을 공부하기 시작하고 처음 겪는 문제들에 대해서 정리를 해두고자 합니다.
아주 초보적인 문제이고 아주 간단한 해결 방법들이지만 처음 시작하는 분들에게는 도움이 될지도 모르겠다는 생각으로 기록을 남기고자 합니다.
[문제1 : python command not found 에러 발생]
라즈베리파이에서 최초로 python script를 작성해서 실행하려 하였는데, "python command not found"와 같은 에러가 뜨면서 실행되지 않는다면 제법 당황스러울 수 있겠습니다.
혹은 기존 라즈베리파이에서는 잘 동작하던 python script를 다른 라즈베리파이에 복사해서 수행하려 할때 이런 에러가 뜰 수도 있습니다.
이런 문제가 발생하는 이유는 python script를 수행시킬 수 있는 python interpreter 패키지가 설치되어 있지 않기 때문입니다.
아래의 명령어를 입력하여 python 패키지를 설치해줍니다.
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install python |
패키지를 설치하는 명령은 sudo apt-get install python 이지만, 그 이전에 패키지를 업데이트하고 업그레이드하는 sudo apt-get update 와 sudo apt-get upgrade 를 관용적으로 수행하시길 바랍니다.
위의 명령을 단 한줄로 처리할 수 있는 방법도 있습니다.
$ sudo apt-get update && sudo apt-get upgrade && sudo apt-get install python |
&&의 의미는 앞의 명령이 성공했을 때만 다음 명령을 수행한다는 의미입니다.
즉, sudo apt-get update 명령이 성공했을 경우에만 sudo apt-get upgrade를 수행하고, sudo apt-get upgrade 명령이 성공했을 경우에만 sudo apt-get install python 명령을 수행한다는 의미입니다.
설치시에 'Y'를 입력하는 것조차도 귀찮으시다면 아래와 같이 -y 옵션을 넣어주는 것도 방법입니다.
$ sudo apt-get update && sudo apt-get upgrade && sudo apt-get install python -y |
단 한줄로 간편하게 패키지를 설치할 수 있습니다.
만약 자동 스크립트에서 패키지를 설치하거나, docker 내부에서 동작하거나, 표준입출력이 연결되지 않은 상태에서 python을 설치하려고 한다면 위의 명령이 가장 적절하겠습니다.
아무튼, 설치를 진행하면 아래와 같은 메시지가 나오면서 설치가 완료됩니다.
ubuntu@ubuntu:~/project$ sudo apt-get install python
Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'python-is-python2' instead of 'python'
The following additional packages will be installed:
libpython2-stdlib libpython2.7-minimal libpython2.7-stdlib python2 python2-minimal python2.7
python2.7-minimal
Suggested packages:
python2-doc python-tk python2.7-doc binfmt-support
The following NEW packages will be installed:
libpython2-stdlib libpython2.7-minimal libpython2.7-stdlib python-is-python2 python2 python2-minimal
python2.7 python2.7-minimal
0 upgraded, 8 newly installed, 0 to remove and 5 not upgraded.
Need to get 3738 kB of archives.
After this operation, 16.2 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://ports.ubuntu.com/ubuntu-ports focal-updates/universe arm64 libpython2.7-minimal arm64 2.7.18-1~20.04 [335 kB]
Get:2 http://ports.ubuntu.com/ubuntu-ports focal-updates/universe arm64 python2.7-minimal arm64 2.7.18-1~20.04 [1223 kB]
Get:3 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 python2-minimal arm64 2.7.17-2ubuntu4 [27.5 kB]
Get:4 http://ports.ubuntu.com/ubuntu-ports focal-updates/universe arm64 libpython2.7-stdlib arm64 2.7.18-1~20.04 [1868 kB]
Get:5 http://ports.ubuntu.com/ubuntu-ports focal-updates/universe arm64 python2.7 arm64 2.7.18-1~20.04 [248 kB]
Get:6 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libpython2-stdlib arm64 2.7.17-2ubuntu4 [7072 B]
Get:7 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 python2 arm64 2.7.17-2ubuntu4 [26.5 kB]
Get:8 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 python-is-python2 all 2.7.17-4 [2496 B]
Fetched 3738 kB in 4s (1028 kB/s)
Selecting previously unselected package libpython2.7-minimal:arm64.
(Reading database ... 101447 files and directories currently installed.)
Preparing to unpack .../0-libpython2.7-minimal_2.7.18-1~20.04_arm64.deb ...
Unpacking libpython2.7-minimal:arm64 (2.7.18-1~20.04) ...
Selecting previously unselected package python2.7-minimal.
Preparing to unpack .../1-python2.7-minimal_2.7.18-1~20.04_arm64.deb ...
Unpacking python2.7-minimal (2.7.18-1~20.04) ...
Selecting previously unselected package python2-minimal.
Preparing to unpack .../2-python2-minimal_2.7.17-2ubuntu4_arm64.deb ...
Unpacking python2-minimal (2.7.17-2ubuntu4) ...
Selecting previously unselected package libpython2.7-stdlib:arm64.
Preparing to unpack .../3-libpython2.7-stdlib_2.7.18-1~20.04_arm64.deb ...
Unpacking libpython2.7-stdlib:arm64 (2.7.18-1~20.04) ...
Selecting previously unselected package python2.7.
Preparing to unpack .../4-python2.7_2.7.18-1~20.04_arm64.deb ...
Unpacking python2.7 (2.7.18-1~20.04) ...
Selecting previously unselected package libpython2-stdlib:arm64.
Preparing to unpack .../5-libpython2-stdlib_2.7.17-2ubuntu4_arm64.deb ...
Unpacking libpython2-stdlib:arm64 (2.7.17-2ubuntu4) ...
Setting up libpython2.7-minimal:arm64 (2.7.18-1~20.04) ...
Setting up python2.7-minimal (2.7.18-1~20.04) ...
Linking and byte-compiling packages for runtime python2.7...
Setting up python2-minimal (2.7.17-2ubuntu4) ...
Selecting previously unselected package python2.
(Reading database ... 102194 files and directories currently installed.)
Preparing to unpack .../python2_2.7.17-2ubuntu4_arm64.deb ...
Unpacking python2 (2.7.17-2ubuntu4) ...
Selecting previously unselected package python-is-python2.
Preparing to unpack .../python-is-python2_2.7.17-4_all.deb ...
Unpacking python-is-python2 (2.7.17-4) ...
Setting up libpython2.7-stdlib:arm64 (2.7.18-1~20.04) ...
Setting up python2.7 (2.7.18-1~20.04) ...
Setting up libpython2-stdlib:arm64 (2.7.17-2ubuntu4) ...
Setting up python2 (2.7.17-2ubuntu4) ...
Setting up python-is-python2 (2.7.17-4) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for mime-support (3.64ubuntu1) ...
이 상태에서 다시 python script를 수행하면 python이 정상적으로 수행됩니다.
[문제2. ImportError: No module named RPi.GPIO 에러 발생]
만약 "ImportError: No module named RPi.GPIO"라는 에러가 발생한다면, python 스크립트가 수행되긴 했는데, 라즈베리파이 GPIO 패키지가 설치되어 있지 않기 때문입니다.
아래와 같이 패키지를 추가로 설치해주면 간단하게 문제가 해결됩니다.
$ sudo apt-get install python-rpi.gpio |
실행하면 아래와 같은 메시지들이 출력되면서 python-rpi.gpio 패키지가 설치됩니다.
ubuntu@ubuntu:~/project$ sudo apt-get install python-rpi.gpio
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
rpi.gpio-common
The following NEW packages will be installed:
python-rpi.gpio rpi.gpio-common
0 upgraded, 2 newly installed, 0 to remove and 5 not upgraded.
Need to get 25.4 kB of archives.
After this operation, 92.2 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 rpi.gpio-common arm64 0.6.5-1ubuntu3 [3680 B]
Get:2 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 python-rpi.gpio arm64 0.6.5-1ubuntu3 [21.7 kB]
Fetched 25.4 kB in 1s (20.4 kB/s)
Selecting previously unselected package rpi.gpio-common:arm64.
(Reading database ... 102228 files and directories currently installed.)
Preparing to unpack .../rpi.gpio-common_0.6.5-1ubuntu3_arm64.deb ...
Unpacking rpi.gpio-common:arm64 (0.6.5-1ubuntu3) ...
Selecting previously unselected package python-rpi.gpio.
Preparing to unpack .../python-rpi.gpio_0.6.5-1ubuntu3_arm64.deb ...
Unpacking python-rpi.gpio (0.6.5-1ubuntu3) ...
Setting up rpi.gpio-common:arm64 (0.6.5-1ubuntu3) ...
Setting up python-rpi.gpio (0.6.5-1ubuntu3) ...
만약 여러분께서 python3를 사용하고 계신다면 RPi.GPIO 역시도 python3 용으로 설치해주셔야 합니다.
$ sudo apt-get install python3-rpi.gpio |
이 부분이 좀 복잡하실 수 있지만 python3를 사용하신다면, RPi.GPIO 패키지 역시도 python3용으로 설치해야 된다는점을 잊지 마시기 바랍니다!
[문제3. This channel is already in use 경고 메시지 발생]
만약, python script 실행시에 "This channel is already in use" 라는 경고 메시지가 발생하더라도 스크립트는 계속 수행됩니다. 이 경고 메시지를 무시하기 위해서는 GPIO.setwarnings(False) 구문을 script 초반에 넣어주면 됩니다.
import RPi.GPIO as GPIO
import time
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(14, GPIO.OUT)
GPIO.setup(15, GPIO.OUT)
GPIO.setup(18, GPIO.OUT)
GPIO.output(14, True)
위와 같이 입력해줬더니, 정상적으로 잘 수행이 되네요.
이상으로 라즈베리파이 입문시에 접하게되는 에러와 경고 메시지에 대해서 다뤄보았습니다.
끝까지 읽어주셔서 감사합니다.
오만뒤 작성
'Study > 라즈베리파이 공부' 카테고리의 다른 글
라즈베리파이로 active buzzer 제어하는 방법 (0) | 2021.01.23 |
---|---|
[라즈베리파이] GPO 포트로 LED 제어하기 (0) | 2021.01.22 |
[라즈베리파이] Ubuntu Linux에 FTP 서버 설치 (0) | 2021.01.20 |
[라즈베리파이] Ubuntu Linux에 Samba 서버 설치 (0) | 2021.01.19 |
라즈베리파이 회로도 & Data Sheet (0) | 2021.01.19 |