반응형

python 3.8.12, 3.x 버전 설치

버전 설치라고 하지만, 실제로는 빌드작업이다. 여기서는 3.8.12 버전을 빌드한다. 글을 적는 시점에서 최신버전인 3.9.x를 설치하더라도 버전 숫자만 바꿔서 진행을 해도 무난하다.

배경

간만에 방 구석에서 굴러다니는 raspberry pi3 를 2021년 9월 시점의 rasbian lite 버전을 설치했다. 여기에는 python 3.7.3 이 기본적으로 설치가 되어 있다. 얼마전 pyqt5 를 윈도에서 시험삼아서 테스트할 때 python3.8.10 이상이 되어야 다른 package에 문제가 없는 것을 확인했기 때문에 3.8.12를 설치하려 했다. 하지만, apt install 명령어는 기본적으로 이미 빌드가 되어 있는 파일을 설치하는 것이라 apt에 등록되어 있는 repository에 새로운 빌드된 것이 없다면, apt install 로 설치할 수 없다.

이 때문에 자신의 (독특하고 까다로운?) 입맛대로 버전을 바꿔서 설치를 하기 위해서는 필요한 python 3.8.12 소스파일을 직접 다운로드 받아서 직접 빌드 하여 설치하는 방법이 있다. 문제는 이 방법은 상당한 시간이 걸린다.

따라서 만약 해당 환경을 양산을 해야 한다면, deb package로 만들거나 img로 만들어 놓고 쓰는 것을 추천한다.

빌드 방법

우선 빌드에 필요한 빌드 도구들이 필요하다. python 공식 문서에서 찾을 수 있을 것이다(아마도).

sudo apt install -y build-essential tk-dev libncurses5-dev libncursesw5-dev \
    libreadline6-dev libdb5.3-dev libgdbm-dev libsqlite3-dev \
    libssl-dev libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev \
    libffi-dev tar wget vim

python 소스코드 다운로드

https://www.python.org/ftp/python/ 에서 소스코드 압축 파일을 마우스 우클릭 한뒤 링크복사를 선택하여 복사한다음에 wget 명령어 뒤에 붙여넣어서 다운로드를 받자.

wget https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tgz

빌드

다운로드된 압축파일을 풀고 해당 폴더에서 make 명령어를 순서대로 입력하면 된다.

sudo tar zxf Python-3.8.12.tgz
cd Python-3.8.12
sudo ./configure --enable-optimizations
sudo make -j4
sudo make altinstall

만약 sudo make -j4 진행중에 실패를 했다면 메모리 부족일 가능성이 높다. 이경우 -j 뒤의 숫자를 줄여서 다시 시도하면 된다. 자신이 상남자가 아닌 겁쟁이라면 처음부터 -j2로 해도 상관 없다.

설치 확인

그냥 python 버전으로 확인해보면 된다.

python3.8 -V

환경변수 설정

python 명렁어의 환경변수를 수정하여 3.8.12가 실행되도록 하자, 다음 명령어 한줄이면 된다. 만약 잘못 입력을 했다면, vim 혹은 nano 같은 편집 툴로 마지막줄을 수정하면 된다.

echo "alias python=/usr/local/bin/python3.8" >> ~/.bashrc
source ~/.bashrc
python --version

패키지 관리

pip 도 경로를 확인하고 환경변수를 변경해도 된다. 기본적으로 sudo apt install python3-pip 로 설치할 경우 3.7.3 버전에 해당되는 pip3가 설치된다. python -m pip install $package 형태로 사용하면 된다.

python -m pip --version

참조

 

How to install Python 3 - Raspberry Pi Forums

billintad wrote: As far as I am aware the recommended way to install a python package is to use : man says: NAME pip - A tool for installing and managing Python packages SYNOPSIS pip [options] pip3 [options] DESCRIPTION pip is a Python package installer, r

forums.raspberrypi.com

 

 

Updating Python 3.7 to 3.8 on Raspberry Pi

I recently updated my Raspberry Pi with sudo apt update and sudo apt full-upgrade to the system. Even if Python 3.8 is out, when I run python3 in terminal, it shows me version 3.7, instead of 3.8. ...

raspberrypi.stackexchange.com

 

[Python] 라즈베리파이에서 python 최신 버전 설치하기

라즈베리3b+를 기준으로 작성되었습니다.라즈베리파이에 Python 3.5.3 버전이 제공되고 있다python을 최신 버전으로 변경하는 방법은 아래와 같다 ( 3.8.5 버전을 기준으로 작성 )1. Python을 설치하기 전

power-of-optimism.tistory.com

 

반응형
반응형

라즈베리 파이3 : 카메라 모듈 v2

알아야 했던 배경

참여한 프로젝트에서 다수의 라즈베리 파이기기에서 사진을 찍어서 가져와야 되므로 반드시 알아야 했던 기능이다.


하드웨어 설치

하드웨어는 방향을 잘 살피고 꼿으면 된다(참 쉽죠?). 


카메라 제어하기(소프트웨어)

공식 라즈베리 파이 카메라 모듈 v2를 사용한다면, 라즈비안에 기본적으로 카메라를 컨트롤 할 수 있는 프로그램을 이미 갖고 있다. 소프트웨어를 개발할 경우 파이썬에는 라이브러리를 제공하고 있다. bash 쉘에서 프로그램 실행이 가능하다면, 다른 JAVA, C/C++ 기타 가벼운 프로그래밍 언어로도 카메라를 컨트롤을 할 수 있다.


기존 프로그램 사용방법은 라즈베리 파이 공식 문서에 있다. 크게 raspistill, raspivid, raspistillyuv라는 프로그램이 존재하는데, 이중 raspistill, raspistillyuv는 이름처럼 거의 비슷한 사진 촬영(영문으로는 image capture로 되어 있지만 기능상 사진 촬영이적절하다)기능이고 raspivid는 비디오 촬영 기능이다.


카메라 설치 테스트

 공식문서에서 소개하는 방식으로 카메라가 정상적으로 설치되었는지 확인하기 위해서는 터미널 창에 다음 명령어를 실행한다.

raspistill -v -o test.jpg

 정상적으로 하드웨어가 설치되어 있다면, 약 5초간 실시간 동영상이 화면이 보이고 난다음에 카메라 모듈에 대한 정보를 출력된다. 여기서 '-'붙은  명령어는 옵션을 의미하므로 해당 문서를 참고를 해야 한다.

공식 프로그램 옵션 문서[참조링크]

(귀찮아서 그렇지 나중에는 어딘가에 따로 적어 놔야 할 것이다)

카메라 모듈 정보에서 주목해야 할 것은 기본적인 화질이 75~85로 출력되도록 설정이 되어 있다는 것을 알 수 있다. 이처럼 디폴트 설정값이 무엇인지 알아야 자신의 프로젝트에 적절히 사용할 수 있다.


필자 기준으로 가장 기본적으로 알아야 하는 옵션은 다음과 같다. 공식문서와 순서가 다르다.

 -rot

화면 회전각도 단위는 도(dgree)이다(각도가 나오면 단위가 매우 민감함)

 -t

옵션뒤에 입력된 수치만큼 마이크로초(ms)후의 카메라에서 캡쳐한다 0을 입력하면, 무한대가 된다. 기본적으로는 5000으로 되어 있어서 5초후에 사진이 찍힌다.

 -k

사진을 x키나 enter키의 입력을 감지해서 이미지를 찍는다. -t 옵션을 0으로 하고 연동하면 자연스러운 디지털 사진기처럼 구현할 수 있다.

 -o

경로를 포함한 파일저장 이름을 적되 확장자까지 적어야 한다. 

 -q

앞서 언급한 화질로 0~100까지 정할 수 있다. 

 -n

미리보기 화면을 끈다. 미리보기 설정은 기본적으로 되어 있다. 

 

 -w

이미지의 가로길이 단위는 픽셀이다 

 -h

이미지의 세로길이 단위는 픽셀이다. 

 -md

모드로 기본적으로 정해져 있는 화면비와 화면 길이로 잡아준다 0~7까지 있다(이름을 잘못 지은것 같다). 


다음은 이미지나 사진에 대해서 조금 알때 먼저 살펴보게 되는 옵션이다.

 -e

인코딩을 변경할 수 있다. 변경가능한 인코딩은 jpg, bmp, gif, png인데 기본적으로는 jpg로 되어 있다. 

 -ss

셔터 스피드를 설정할 수 있다 최대 6000마이크로 초로 할 수 있다. 


이 밖에 문서에서 제공하는 기능은 다양하다. 화면 밝기 조절에서 나이트 모드 등 다양한 기능들이 있지만, 일반적으로 많이 사용하지 않는 기능들이기 때문에 여기에는 정리 하지 않았다.


카메라 접근 설정

 말이 접근 설정이지만 실제로는 퍼미션(permission)설정이다. 리눅스 시스템에서는 기본적으로 폴더와 파일에서 접근 권한을 3단위로 나누어진다. 읽기/쓰기/실행 단계로 나누어지며, 이 접근관한을 각각 수퍼계정(root)/소유계정(user)/아무나(anyones) 기본적으로 프로그램을 네트워크 통신을 통해서 실행하게 되는 경우 아무나(?)에 해당된다. 때문에 라즈베리파이에 키보드와 마우스를 꼿고 실행하거나 ssh로 원격상태로 실행할 경우에는 대부분 소유계정에서 실행을 하기 때문에 문제없이 작동이 된다.


 하지만, 자신이 만든 웹 앱이나 프로그램으로 실행할 경우에는 계정이 아무나(혹은 게스트)가 되는데 이때 디바이스는 기본적으로 아무나 접근할 수 없게 설정되어 있다. 때문에 이러한 설정을 변경해줘야 한다. 카메라 모듈 v2의 디바이스 파일은 /dev/vchiq이다. 익숙한 리눅스 유저들은 다음 명령어를 실행할 것이다.

sudo chmod 766 /dev/vchiq

하지만, 이렇게 변경을 해도 디바이스 쪽은 다시 재부팅을 하면 초기상태로 되돌아가 버린다. 이를 위해서는 초기 퍼미션을 바꿔야 하는데 열심히 포럼글을 찾다가 알게 되었다. 물론 포럼에 올라와있는 글대로 하면 안되고 의미를 생각하고 설정을 하니 된것이다(우연한 실수로 성공함).

다음경로에 파일을 생성한다.

sudo nano /etc/udev/rules.d/10-vchiq-permissions.rules

다음 한줄을 입력한 다음에 저장한다.

SYSTEM=="vchiq",GROUP="video",MODE="766"


그리고 재부팅을 한뒤에 다음 명령어로 지속적으로 적용이 되는지 확인하면된다.

ls -al /dev/vchiq


반응형
반응형

라즈베리 파이3 고정 IP 설정

알아야 했던 배경

 진행하는 프로젝트 특성상 폐쇄적인 네트워크 환경에서 진행을 한다. 네트워크 관련 지식이 부족한 관계로 무선 공유기를 이용하되 각 기기별로 정해진 IP를 할당해서 사용해야 했다. 따라서 고정 IP 설정이 필수였다.


 문제는 웹 검색시 많은 정보가 있었음에도 쉽게 되지 않았었다. 공식 포럼에 올라온 방법은 2가지의 파일을 수정하는데, 실제로 해본결과 한개의 파일만 수정해도 적용이 되었었다.


네트워크 정보 입력

 고정 IP를 할당을 한다는건 기기가 네트워크 정보에 대해서 알고 있다는 의미이다. 이러한 정보를 기기에 입력해 줘야 한다. 다행히 무선네트워크는 GUI 환경에서 한번 접속을 하면 SSID와 PW는 아래의 경로에 저장이 된다.

/etc/wpa_supplicant/wpa_supplicant.conf


네트워크 환경 입력

 터미널 창(Ctrl + Alt + T)을 열고 다음 경로의 설정파일을 수정한다.


sudo nano /etc/network/interfaces
nano외에 자신이 편한 편집기를 사용해도 된다. 파일을 열람하다보면 다음과 같은 내용을 볼 수 있다.

#(중략)
iface wlan0 inet manual
    wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

iface eth0 inet manual
#(중략)

위의 부분을 아래와 같이 수정을 한다.

#(중략)
#iface wlan0 inet manual
iface wlan0 inet static    #고정IP로 설정
    wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
address 192.168.0.xxx    #할당받을 주소
netmask 255.255.255.0    #공유기에서 확인한다
network 192.168.0.0       #공유기IP주소에서 마지막 실주소가 0
gateway 192.168.0.1      #공유기IP주소

iface eth0 inet manual
#(중략)

 여기서 #은 주석처리를 의미하므로 해당 줄은 실행은 안한다는 의미이다. Wlan0은 WiFi랜이고, eth0는 유선랜을 의미한다.


 address는 해당 기기가 요청한 IP 주소, netmask는 주소 할당방식인데, 기본적인 설정은 위와 같지만, 자신의 공유기설정에서 넷마스크가 어떻게 되어 있는지 확인을 하면 된다. network는 공유기가 갖는 실 주소체계에서 0이 되어야 하며, gateway는 공유기의 ip주소를 입력하면된다.


nano로 편집했을 경우 Ctrl + x를 눌러서 변경내용을 저장하고 종료하면 된다. GUI환경에서는 공유기접속을 시키면 된다.


IP할당 확인

 만약 이미 IP를 할당받은 상태라면, 방금 수정한 내용이 적용이 안되어 있다. 그럴경우 다음 명령어로 와이파이 랜 디바이스를 껐다가 켜본다.


sudo ifdown wlan0
sudo ifup wlan0
디파이스가 켜진다음에 $ifconfig 를 실행하여 확인하면 IP충돌이 나지 않은 이상 wlan0 부분에 정상적인 IP를 할당 받는다.


반응형
반응형

라즈비안(라즈베리 파이3) 초기 설정

라즈베리 파이3는 운영체제를 갖은 상태에서 동작하는 기기이기 때문에 작은 기기치고는 상당히 높은 스펙을 갖고 있다. 때문에 공식 홈페이지에서 운영체제 다운로드에서 공식적 운영체제인 라즈비안(Raspbian)외에도 우분투 마테(나는 매이트로 읽었었다), 윈도우10 IoT 코어 등을 설치할 수 있다.


하지만, 가능하면 공식 제공되는 라즈비안을 사용하도록 하고 나중에 기회가 되면 다른 운영체제도 건들여 보거나 다른 사람이 건들인걸 구경해봐야 겠다.


 운영체제를 설치한 이후에는 제일 먼저 해야 할 일은 메모리 확장인데, ISO 이미지로 설치를 했다면, 최근 버전에서는 부팅시 자동으로 확장이 되니 메모리 확장에 대해서는 신경을 안써도 된다.


초기 환경설정


 상단 우측의 라즈베리 아이콘을 클릭하여 [Preferences->Raspberry Pi Configuration]을 클릭하여 셋팅 창을 열고 해당되는 항목을 수정하면 된다.


Interface

자신이 사용하고자 하는 디바이스를 사용할 수 있도로 해준다. 현재 카메라를 사용할 것이므로 카메라부분을 사용가능하게 하면 된다.


Localisation

Locale : English / Us

Timezone : Aisa / Seoul

Keyboard : Korean of Republic / Korean

WiFi Country : US


 Wifi를 미국(US)로 해야 되는 이유는 운영체제상의 버그로 인해서 한국(KR)로 하면 와이파이 기기를 인식 못 한다. 이때문에 라즈베리파이3가 처음 출시 되었을때 곳곳에서 멘붕 소리가 커뮤니티에서 들려 왔었다. 언젠가는 패치를 하겠지만, 글을 적는 시점까지는 버그가 여전히 유효하다. 설정을 마치고 OK를 클릭하면, 설정 적용을 위해서 재부팅 할 것을 권고한다.


터미널 update, upgrade

 재부팅 후 터미널 창(Ctrl + Alt + T)을 열고 다음과 같이 업데이트를 한다.


sudo apt-get update && sudo apt-get upgrade -y


 리눅스를 좀 다뤄본 사람은 알겠지만, && 명령어는 리눅스 쉘 매크로중 하나로 여러개의 명령을 실행할 수 있도록 해준다.

 update가 끝나면, 바로 upgrade를 시작한다. 이전에는 자동으로 마쳤는데, 요즘(2016년 11월 이후)에는 확인 문서가 확인할때까지 중단된다. 시간이 좀 걸리니 잠시 티타임을 갖고 오면 된다.

 중간에 확인해서 선택해야 하는 상황이 발생한다면, 가능하면, default가 무엇이지 확인을 하고 선택하는 것이 좋다.

반응형

+ Recent posts