본문 바로가기

Study/라즈베리파이 공부

[라즈베리파이] sudo: python: command not found 에러 발생시 조치방법

반응형

라즈베리파이로 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 updatesudo 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)

 

위와 같이 입력해줬더니, 정상적으로 잘 수행이 되네요. 

 


 

이상으로 라즈베리파이 입문시에 접하게되는 에러와 경고 메시지에 대해서 다뤄보았습니다. 

끝까지 읽어주셔서 감사합니다. 

 

오만뒤 작성

반응형