Virtualenv로 Python2, Python3 환경 만들기

Python을 쓸 때 virtualenv는 필수였다. 거기에 덤으로 virtualenvwrapper도 같이 쓰곤 했다.

그러던 중 누군가 나에게 말했다.

아직도 Python2를 쓴다고? 이제 대세는 Python3이야!

팔랑귀였던 나는 당장 Python3을 설치했다.

하지만 뭔가 문제가 생겼다.
터미널에서 virtualenv + virtualenvwrapper의 조합으로 가상환경을 구성해 쓰던 나였는데 virtualenv 이 놈은 Python2만 바라보고 있으니 Python3는 가상환경을 구성하지 못하는 불편함이 있었다.

혹시 방법이 있을까해서 help를 쳐봤다.

1
2
3
4
5
6
7
8
9
10
11
$ mkvirtualenv --help
...

-p PYTHON_EXE, --python=PYTHON_EXE
The Python interpreter to use, e.g.,
--python=python2.5 will use the python2.5 interpreter
to create the new environment. The default is the
interpreter that virtualenv was installed with
(/usr/local/opt/python/bin/python2.7)

...

나같은 사람이 나뿐만이 아니었나보다.

방법

1
2
3
4
5
6
$ mkvirtualenv -p /usr/local/bin/python3 python3

...

(python3) $ python --version
Python 3.5.2

mkvirtualenv -p <PYTHON_PATH> <VIRTUALENV_NAME>

이 명령어를 기억하자.

그리고

conda라는 것도 있던데 나중에 한번 써봐야겠다.

Jupyter에 virtualenv 커널 추가하기

보통 Python 을 쓸 때 virtualenv 를 사용해 독립적인 환경을 구성해놓고 썻다.

virtualenv 를 사용하면 각 환경 별로 패키지를 달리 설치하여 충돌도 막아주고 깔끔한 개발 환경은 지원해주기 때문이다.

하지만 Jupyter 는 개발 환경에 독립적일 필요가 없으니 virtualenv 에 가두지 않고 글로벌하게 설치했다.

그리고 당연하게도 Jupyter 에서 virtualenv 에 설치된 패키지들에 접근하지 못했다.

순간 “그럼 virtualenv 안에 Jupyter 를 설치해야 되는구나!” 라는 생각을 했지만 이건 아닌것 같아서 구글링을 시작했다.

그리고 역시 은 있었다!

설정

일단 적당한 virtualenv를 만들어 놓자.

Jupyter 의 설정들을 보기 위해 터미널에서 jupyter --paths 를 입력한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
$ jupyter --paths
config:
/Users/mac/.jupyter
/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/etc/jupyter
/usr/local/etc/jupyter
/etc/jupyter
data:
/Users/mac/Library/Jupyter
/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/share/jupyter
/usr/local/share/jupyter
/usr/share/jupyter
runtime:
/Users/mac/Library/Jupyter/runtime

그리고 아까 생성한 virtualenv 를 활성화하고, which python 명령어로 가상환경의 위치를 파악한다.

1
2
(tensorflow) $ which python
/Users/mac/.envs/tensorflow/bin/python

그리고 ipykernel 모듈을 설치한다.

1
(tensorflow) $ pip install ipykernel

이제 Jupyter 에 kernel을 추가만 하면 된다.(까먹지말자)

1
$ mkdir /Users/mac/Library/Jupyter/kernels/tensorflow

마지막으로 kernel.json file을 하나 생성해주자.

1
2
3
4
5
6
{
"argv": [ "/Users/mac/.envs/tensorflow/bin/python", "-m", "ipykernel",
"-f", "{connection_file}"],
"display_name": "tensorflow",
"language": "python"
}

그리고 Jupyter를 실행하고 확인하면!

jupyter_1

tensorflow 라는 커널이 추가된 것을 확인할 수 있다!

Refer

라즈베리파이와 페이스북 메신저를 사용한 온습도 모니터링 봇 개발

집이 1층인데 햇빛도 잘 안들어오고 환기도 잘 안되서 거의 항상 습하고 곰팡이도…
어느 주말에 그날도 역시 습한 집에 누워있다가 갑자기 집이 도대체 얼마나 습한건지 궁금해졌다.
어떻게 할까 고민하던 중 작년에 IoT관련 세미나에서 받은 라즈베리파이와 키트를 살펴보니 온습도 센서를 발견했다.(이거다!)
그래서 무작정 개발해보기로 했다.

개발 구상

  • 라즈베리파이와 온습도 센서를 통해 데이터 가져오기
  • 온습도 데이터를 저장하고 웹에서 간단히 보여줄 수 있는 웹 서버 개발
  • (후에 추가된) 온습도 모니터링해서 알려주는 봇 개발

이렇게만 하면 되겠지..?

라즈베리파이

일단 라즈베리파이에 Thing+가 셋팅되어 있었는데, 그 API를 활용해서 데이터를 불러오려고 시도했다. 하지만 뭔가 잘못된것인지 라즈베리파이와 연동이 안되서 실패했다.
그래서 그냥 빵판에 연결해서 데이터를 뽑아보는 방법으로 바꿨는데 하다보니 좋은 오픈소스도 있어서 쉽게 할 수 있었다.

회로도

[출처] Adafruit

위 그림처럼 회로를 연결하고 테스트를 해봤다. 필요한 소스는 Adafruit_Python_DHT 여기에서 구할 수 있었다.

1
2
$ python AdafruitDHT.py 11 4
Temp=31.0* Humidity=42.0%

그리고 저 라이브러리를 사용해서 얻은 온습도 데이터를 10초마다 보낼 수 있게 crontab을 사용했다.

1
2
3
4
5
6
7
8
9
10
11
12
import Adafruit_DHT
import requests
import datetime

humidity, temperature = Adafruit_DHT.read_retry(11, 4)

data = {'humidity': humidity, 'temperature': temperature, 'ticktime': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}

url = 'SERVER_URL'

res = requests.post(url, data=data)
res.content

웹 개발

라즈베리파이로 자체 웹서버를 올려서 사용할까도 생각했었는데 공유기로 연결을 해둬서 그런가 IP포워딩등 여러가지 설정할것이 있어서 그냥 Microsoft의 Azure를 사용하기로 했다.
기본적으로 Node.js + Express 로 웹서버를 구축하고 라즈베리파이에서 전송한 데이터를 몽고디비에 저장하는 API하나를 만들고, 웹 페이지에서 마지막 업데이트 시간과 온도, 습도를 보여주는 페이지를 개발했다.
시간대별로 온습도가 어떻게 변하는지 보고싶어서 plotly.js 라이브러리를 사용해서 그래프를 쉽게 만들었다.
다만 모바일 화면에서 너무 찌그러져보이는 단점이 있는데 커스터마이징을 할 수 있는 d3.js로 나중에 바꿀 생각이다.

생각보다 빠르고 쉽게 구축을 했는데, 막상 웹 페이지에서 보는것만 있으니 조금 별로였다. 쾌적한 온습도 범위를 벗어나면 내가 알 수 있는 어떤 장치가 필요하다고 생각했다.

OMSH WEB

메신저 개발

사실 처음에는 (이미 해봤던)슬랙 API를 활용해서 만들려고했다.
하지만 좀 새로운 것이 없을까 하다가 슬랙과 유사한 서비스인 잔디에도 비슷한 기능이 있을 것 같아서 찾아보니 역시 있었다.
그래서 내가 원하는 습도가 넘어가면 알림을 Jandi Webhook 을 통해 알림을 줄 수 있게 해놨다.

Jandi Webhook Noti

오예!

그런데 이렇게 막상 만들고나니 습도가 높아졌을 때 알림이 오는건 좋은데 내가 원할 때마다 웹 페이지에 접속하고 보는게 생각보다 불편했다.
그래서 뭔가 대안이 없을까 생각을 하다가 요즘 핫하다는 Facebook Messenger 로 온습도를 알려주는 Bot을 만들기로 했다.

막상 한다곤 했지만 아는게 없어서 일단 이 링크를 따라했다.
생각보다 훨씬 빠르고 간단하게 개발이 완료되었는데, 여기에 뭐 쓰기도 애매한 수준이라 생략하겠다.(저 링크에 더 자세히 나온다.)

OMSH Bot

Refer

PYCON APAC 2016 후기

PYCON APAC 2016

작년에 Google I/O Extended Seoul을 후로 이런 컨퍼런스는 처음이다. 여러 컴퍼런스들이 올라올 때 마다 가고싶었지만 같이 갈 사람도 없고 그동안 바쁘다는 이유로 가지 못했다.(사실 같이 갈 사람이 없어서… T_T)

하지만 이번엔 혼자이더라도 가보자! 라는 독한 마음을 품고 회사에 휴가도 내고 가버렸다.

1일차

등록을 하면 에코백과 티셔츠 등 다양한 선물들을 나눠줬다.(역시 오길 잘했어!)
조금 빨리 도착해서 아직은 사람들이 많지는 않았지만 각종 부스에는 사람들이 꽉 차있었다.
pycon_1

그리고 시작된 오프닝!

pycon_2

오프닝 후에는 pandas 라이브러리를 만든 Wes McKinney라는 분의 키노트가 시작되었는데 당연히 영어로 하셨고, 나는 (당연히 못 알아들었다고 한다.)통역기의 힘을 빌려 다행히도 알아들을 수 있었다.
그 분의 말로는 자신이 금융관련 일을 하다가 업무 처리 속도가 너무 느린것이 불편해서 파이썬을 접하고 pandas라는 라이브러리를 만들게 되었다고 한다.
엄청 멋있었다. 내가 불편해서 만들었는데 여러 사람들이 써준다니…
나도 요즘 집이 너무 습해서 개인프로젝트로 온습도 모니터링 시스템을 개발하고 있는데 Wes McKinney와 내 모습이 약간 오버랩 되면서 나 자신한테도 약간 뿌듯했다.

첫번째 키노트를 듣고 나니 넘나 빨리 일어난 탓에 피로가 몰려왔다. 아침에 받은 커피교환권을 쓰러 갔는데 이미 줄이 엄청나게 길어져 있었다. 두번째 키노트는 과감히 생락하고 잠도 깰겸 부스들을 돌아다녀 보기로 했다.

pycon_3

파이콘에 온 사람들은 한번씩 찍었다는 이름 벽

여러가지 부스들이 있었는데 그 중 제트브레인 부스에는 사람이 줄어들지 않았다. 아마도 파이참 라이센스를 준다고 사람들이 그렇게 서있는것 같았다. 사람들이 하길래 나도 했는데 정확히 뭘 주는지는 아직도 잘 모르겠다.(혹시 아는 사람은 댓글좀…)

그리고 여러 부스들을 돌아다녔는데 다들 SNS에 공유하면 기념품을 준다길래 덥석 해버렸다.

pycon_6

스마트스터디 부스

그리고 혼밥으로 점심을 간단히 떼우고 나니 사람들이 이렇게나 많아졌다. 분주하게 부스들을 돌아다니며 기념품들을 받는 사람들도 있고, 빈백에 누워 쉬거나 코딩을 하는 사람들도 많고 다양한 사람들과 네트워킹 하는 사람들도 더러 있었다.

pycon_4

들었던 세션들

Deep Learning with Python & TensorFlow

엄청나게 기대했던 세션인데 그냥 텐서플로우랑 파이썬이랑 잘 되니까 한번써보세요. 이런 느낌이었다. 영어 세션이라 통역기를 들고갔는데 고장난 통역기를 들고와서 거의 못들었다. ㅠ.ㅠ

Creating AI chat bot with Python 3 and TensorFlow

꿀잼 세션이었다. 챗봇을 구현하는 과정들을 간단히 개념적으로 설명해줬는데 설명도 잘해줬다. 무엇보다 그분이 챗봇을 만들게 된 동기가 넘나 감동적이었다.

“First with the head, then with the heart.” -Bryce Courtenay’s The Power of once

뉴스를 재미있게 만드는 방법; 뉴스잼

파이썬으로 데이터를 수집하고 분석하고 전달하는 방법들을 알려줬다. 크롤링이나 형태소 분석기를 사용하는 등 여러가지 유용한 것들이 많았다.

Daily Continuous Deployment를 위한 custom CLI 개발 및 AWS Elastic Beanstalk에 적용하기

이것도 정말 유용했다. 우와 AWS를 이렇게도 쓰는구나… 감탄이었다. 나중에 꼭 다시 찾아볼것 같아서 슬라이드를 북마크 해뒀다.

라이트닝 토크

라이트닝 토크도 듣고 싶었는데 약속이 있어서… ㅠㅠ

2일차

지각이다. 어제 파이콘을 듣고 집에 와서 막 이것저것 하다보니 늦게 자버렸다. 그리고 늦잠을 잤다. 코엑스에 도착하니 오전 일정은 다 끝나있었다.
그런데 오픈 스페이스 토크에 9XD모임이 있길래 거기로 발걸음을 옮겼다.(너로 정했다!)

9XD

저번 모임을 신청했었는데 정원 초과로 참여하지 못했던 모임이다. 갑자기 모인 것 치고는 많은 사람들이 모여서 놀랬다. 모인 사람들과 점심을 먹고 자기소개를 하다보니 세션시간이 다 되어서 흩어지게 되었지만 짧은 시간에나마 사람들과 네트워킹을 한것이 참 좋았다.

pycon_7

스마트스터디

오늘도 부스에 갔다. 어젠 안주던 기념품을 주길래 또 한번 나의 SNS를 팔았다. 내 인스타에는 사진이 4개 올라가 있는데 그 중 2개가 스마트스터디에서 찍은 것이다.(스마트스터디 사랑해요❤️)

pycon_5

2일차 세션

Django vs Flask, 까봅시다!

9XD 모임이 끝나고 부랴부랴 내려가서 들은 세션이다. 처음에 들어갔는데 스피커분이 되게 어려보인다… 라고만 생각했는데 홈페이지에서 보고 깜짝 놀랐다. 선린인터넷 고등학교 학생인 김도현님이 이번 세션 스피커였다. 고등학생인데도 불구하고 여러 프로젝트를 하고 이런 컨퍼런스에서 발표도 한다는 사실에 참 미묘한 감정이 들면서 동기부여도 되던 세션이었다.

클라우드 상에서 Selenium을 이용한 Django 기능 테스트 자동화

이 세션의 주제는 내가 저번에 삽질한 경험이 있던 세션이라 들어봤다. 끝내 포기하고 다른 방법으로 했지만 세션을 듣는 중간중간 무릎을 탁 치던 순간이 몇번 있었다.

파이썬 삼총사

2일차 꿀잼 세션이었다. Tox, Travis, Coveralls 삼총사를 다룬 세션인데, 앞으로 저 삼총사와 함께라면 나도 오픈소스 개발자가 될 수 있을것만 같았다.

라이트닝 토크

1일차에 못들어서 오늘은 끝까지 다 들었다. 그 와중에 한글코딩은 정말 대단하신분 같다.

마무리

사실 많이 아쉬움이 남는 파이콘이었다. 물론 파이콘 그 자체는 매우 훌륭했고 대단했다. 하지만 거기에 참여하는 내가 너무 소극적이었고, 다른 사람들과 네트워킹을 좀 더 잘했더라면… 이러는 아쉬움이 남는 컨퍼런스였다. 다음에 파이콘과 같은 컨퍼런스에 또 가게 된다면 네트워킹을 더 열심히 해야겠다.

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×