본문으로 바로가기

최근에 개인적으로 필요에 의해서 개발하는 프로그램이 있어서 며칠간 열심히 파이썬과 씨름을 하면서 어느정도 완성을 했다.

 

익숙한 언어인 자바로 개발을할까 하다가 지난번에 Django를 조금 다루면서 조금은 익숙해진 파이썬을 선택했다. 자바로 개발을할까 조금 고민했지만, 회사일을 하느라 매일 쓰는 자바를 개인적인 취미(?)에 사용하려니 취미가 아닌 일하는 느낌이나서 자바는 사용하지 않기로 했다.

 

프로그램은

1. Apscheduler를 통해서 주기적으로 정해진 작업을 수행.

2. 그 정해진 일은 selenium을 사용해서 특정 웹페이지에 접속해서 정해진 동작을 수행하면서 화면을 읽는다.

3. 읽어온 html에서 내가 필요로하는 정보만 추출하여 DB에 저장

4. Flask로 웹 화면을 제공해주고, 저장된 데이터를 내 필요에 맞게 화면에 출력

 

완성된 프로그램은 집에있는 라즈베리파이에서 구동되며, 매일 특정시간 주기로 데이터를 수집하게 될 예정이다.

 

 

지금까지 완성한 프로그램을 라즈베리파이에 올리면서 격은 여러가지 상황과 해결한 방법을 블로그에 기록하고자 한다.

 

Python3.6버전으로 Anaconda를 사용하여 가상환경을 구성하여 개발 PC환경을 구성했다. Django를 잠시 다뤄보면서 Python으로 개발을 할 땐 가상환경 사용이 많은 부분에서 유리한점이 있다는것을 알게 되었다. 게다가 Anaconda는 윈도우 환경에서 설치도 쉽고 GUI프로그램을 제공해주기 때문에 설치된 패키지를 관리할때 매우 편한 인상을 받았다.

 

이제 라즈베리파이 서버에 동일한 환경을 구축해 줄 차례였다.

 


이리저리 웹 서칭을 해 보니, Anaconda라즈베리파이에는 제공되지 않았고 Anaconda와 유사한 환경을 구성하기 위해서는 Miniconda 또는 Berryconda를 사용해야 한다는것을 알게되었다.

 

Anaconda, Miniconda, Berryconda를 간략하게 설명하자면, 

- Anaconda : Python 가상환경과 패키지관리를 편리하게 해 주는 툴

- Miniconda : Anaconda를 설치할때 기본으로 함께 설치되는 패키지를 모두 제외한 경량버전. 필요한 패키지를 직접 추가하면 된다.

- Berryconda : Miniconda의 라즈베리파이 버전이다. Miniconda는 공식적으로 Windows, OS X, Linux만 지원하기때문에 라즈베리파이를 위한 Miniconda이다.

 

일단 라즈베리파이에는 Miniconda 또는 Berryconda를 선택해서 설치해야 했다. Miniconda를 먼저 설치 해 보고 나중에 Berryconda를 알게 되어서 두 가지를 모두 설치 해 보았다.

 

두 가지를 모두 설치한 결과 내가 구성해야하는 환경에는 맞지 않아서 Conda가 아닌 다른 가상환경을 사용하기로 결정했다.

 

내가 사용해야하는 라즈베리파이용인 armv7l 패키지가 몇 가지 제공되지 않아서였다. Conda를 사용하면서 일부 패키지는 PIP로 설치하니 일단 모양새도 어색하고 이럴바엔 Conda를 쓰지 않는게 낫겠다는 판단을 했다. 게다가 Flask + mod_wsgi + conda 환경이 잘 동작하지 않았다.

 

이리저리 살펴보니 조금 의심이 가는것이 Python 버전이었다. 내 라즈베리파이에는 Python3.4버전이 기본 버전으로 설치되어 있으며 apt-get 명령어로 설치할 수 있는 Python은 3.4가 최신이었다. 우선 개발할 때 사용한 Python과 동일한 버전으로 환경을 맞추는것을 먼저 해야겠다는 생각을 했다.


열심히 구글링을 해 보니 Python3.6버전을 직접 다운로드 받아서 라즈베리파이에 설치하는 여러가지 가이드들이 많았다. 설치 방법을 자세하게 설명해놓은 글들을 참고해서 설치를하는 중에... 어느 한 블로그의 글을 보고 말았다!

 

라즈베리파이의 OS를 업그레이드하면 기본으로 높은 버전의 Python이 설치되어있으니 OS업그레이드를 추천한다. 최신 OS(Buster)에는 무려 Python3.7버전이 기본으로 되어있다.

 

라즈베리파이의 OS는 위키에 정리가 잘 되어있다.

https://en.wikipedia.org/wiki/Raspbian

 

바로 라즈베리파이 OS업그레이드 방법을 찾았다. Buster가 Python3.7이 기본이니 바로 직전버전 Stretch를 설치하면 Python3.6이 기본 버전이지 않을까?

 

Jessie = Python3.4

Stretch = Python3.5

Buster = Python3.7

 

Stretch로 업그레이드를 먼저 진행했다가 Python 버전이 3.5인 관계로 다시 Buster 업그레이드를 진행했다. 시간이 오래 걸린다....ㅠㅠ

 

Python3.5버전에 정착해보려 했으나 내가 만든 소스에 3.6버전부터 지원되는 기능을 여기저기 사용을해서 프로그램이 실행되지 않았다. 아래와 같은 기능이 Python3.6부터 사용할 수 있는 문법이라고 한다.

 

print(f"안녕하세요. {name}님")

 

눈물을 머금고 Buster버전으로 업그레이드를 실행. 완료되기까지 시간이 꽤 오래 걸렸다.


라즈베리파이 OS업그레이드를 경험해본김에 여기 정리도 해 본다.

방법은 간단하다.

/etc/apt/sources.list
/etc/apt/sources.list.d/raspi.list

위 두 개의 파일을 에디터로 열어서 안에 있는 URL을 변경한다.

 

- Stretch로 업그레이드는 아래 URL로 변경

http://raspbian.raspberrypi.org/raspbian/ stretchmain contrib non-free rpi

- Buster로 업그레이드는 아래 URL로 변경

http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi

변경이 완료되면 업그레이드 진행

pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ $ sudo apt-get upgrade
pi@raspberrypi:~ $ sudo apt-get dist-upgrade

모든 업그레이트가 완료되면
pi@raspberrypi:~ $ sudo init 6

라즈베리파이가 재시작되면 새 버전으로 업그레이드가 모두 끝난다.

 

일단 지금은 Buster로 업그레이드가 완료되어서 Python3.7버전으로 내 프로그램을 구동시킬 환경을 구성하고 있다.

가상환경 구성은 conda가 아닌 python-venv 기능을 사용해보기로 했다.

 

계속 진행을 해 보면서겪는 시행착오들을 블로그에 정리해 봐야겠다.


댓글을 달아 주세요