파이썬 실행환경 설정하기 with pyenv

[markdown]
virtualenv를 사용하는 법을 올렸었는데, pyenv라는 녀석을 추천해주셔서 실제로 설치해보고 경험해보려고 정리해보았다.

####아래의 링크들을 참고하여 작성했음을 밝혀드립니다.
[pyenv](https://github.com/yyuu/pyenv)
[pyenv-virtualenv](https://github.com/yyuu/pyenv-virtualenv)
[pyenv-installer](https://github.com/yyuu/pyenv-installer)
[pyenv + virtualenv + autoenv 를 통한 Python 개발 환경 구축하기](https://blog.ansuchan.com/how-to-set-python-dev-env/)

### pyenv 설치하기 ( mac OSX )

#### 의존성 패키지 설치

[일반적인 빌드 문제들](https://github.com/yyuu/pyenv/wiki/Common-build-problems)에 나와있는데, mac OSX에 미리 설치해야하는 의존성 패키지가 있으니 한번 확인해보도록 하자.

#### 설치 스크립트
“`python
brew update
brew install pyenv
“`

### pyenv 설치하기 ( ubuntu )

#### 의존성 패키지 설치
우분투에서 미리 설치해두어야하는 패키지들은 아래와 같다.

“`
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm
“`

#### 설치 하기 (pyenv installer로 설치함)
“`
sudo apt-get install git
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
“`

pyenv installer 라는 녀석으로 설치하는 게 위의 스크립트 인데, 아래의 플러그인들도 같이 설치된다.

pyenv-doctor, pyenv-pip-rehash, pyenv-update, pyenv-virtualenv, pyenv-which-ext

설치후에 아래의 스크립트를 .profile에 추가해서 pyenv를 패스에 추가해줘야한다.

“`
export PATH=”$HOME/.pyenv/bin:$PATH”
eval “$(pyenv init -)”
eval “$(pyenv virtualenv-init -)”
“`

### pyenv로 파이썬 설치하기

“`
pyenv install 2.7.8
pyenv install 3.4.3
“`

설치가 가능한 파이썬 바이너리는 아래의 커맨드로 확인가능하다

“`
pyenv install –list
“`

### pyenv로 virtualenv 관리하기

pyenv로 파이썬을 설치하면 `.pyenv/versions` 디렉토리 밑에 버젼별로 2.7.x, 3.4.x등의 디렉토리가 생긴다. 버전번호가 아니라 virtualenv 플러그인을 사용하면 버젼을 지정하고 거기에 이름을 넣어서 관리가 가능하다. pyenv installer로 설치를 하면 자동으로 pyenv-virtualenv 플러그인이 설치되므로 추가로 설치는 하지 않아도 된다.

솔직히 virtualenv 플러그인은 왜 필요한지 처음에는 의아했는데, 생각해보니 2가지 정도가 있었다.

1. 같은 파이썬 버젼이지만, 패키지를 다르게 설치하고 싶은경우.
2. virtualenv를 활성화하면 쉘의 앞머리에 가상환경 명이 나와서 편하니까

약간 귀찮다고 생각될 수도 있지만, pyenv installer로 설치하면 한방에 설치되니 최소한 설치는 매우 편하게 되어있다. pyenv의 서브명령어로 pyenv virtualenv 를 사용가능하게 한다는것 정도만 알면되니 사용하는게 이득으로 생각된다.

맥의 경우

“`
$ brew install pyenv-virtualenv
“`
로 따로 설치할 수 있다.

virtualenv플러그인이 있으면 아래의 커맨드가 실행이 가능하다.

“`
$ pyenv virtualenv
“`

버젼을 지정하지 않으면 현재 시스템의 버젼으로 가상환경이 설정된다.
“`
$ pyenv version #으로 현재 버젼의 확인이 가능하다
$ pyenv virtualenv py34
“`

버젼을 지정해서 가상환경의 설정이 가능하다. (설치하려는 해당 파이썬 버젼은 pyenv의 디폴트 디렉토리에 이미 설치가 된 상황이어야 한다.)

“`
$ pyenv install 2.7.3 # 설치 안한 경우만 실행
$ pyenv virtualenv 2.7.3 py27
“`

#### 가상 환경 활성화

`pyenv versions`를 했을때에 리스트에 나오는 가상환경들을 `pyenv shell`이라는 명령어로 활성화 시킬 수 있다.

“`
$ pyenv versions
위의 명령을 실행했을 때 결과가 아래와 같다면

* system (set by PYENV_VERSION environment variable)
2.7.3
2.7.8
3.4.3
py27
py34
versions

$ pyenv shell 2.7.3
$ pyenv shell py34
“`
등의 커맨드로 활성화 시킬 수 있다.

virtualenv플러그인으로 만든 가상환경인 경우 `activate`, `deactivate`로 활성화 비활성화 할 수 있다. 위의 리스트에서는 `py27`과 `py34`가 virtualenv 플러그인으로 만든 가상환경이다.

“`
$ pyenv activate py27
$ pyenv deactviate
$ pyenv activate py34
“`

이런식으로 가능하다.

`autoenv`라는 것을 사용하면 폴더별로 들어갈 때 가상환경을 지정할 수도 있다고 한다.

#### 느낀점
확실히 추천들을 하실만한 것 같다. rbenv, nvm, rvm등등을 경험해보았는데, 비슷한 느낌으로 pyenv를 사용할 수 있었다. virtualenv는 파이썬 버젼을 업데이트할 경우 pyenv보다는 조금 더 귀찮은 작업들이 있는데, pyenv에서는 그냥 install하고 기존의 패키지만 다시 설치하면 되니 확실히 간편하게 될 것 같다. 그리고 명령어 자체도 virtualenv나 virtualenvwrapper보다는 사용하기 편한 느낌이다. 일단 타이핑하는거 자체도 좀 짧기도 하고…^^;
[/markdown]

파이썬 가상 환경 설정 및 장고 설치하기

[markdown]
갑자기 회사의 동료가 나에게 장고스터디를 해달라고 했다. 마침 장고를 보고있었던 나는 쥐뿔도 모르지만, 이제부터 준비하려고 장고를 열심히 보고 있다.  근데, 나쁜버릇이 나와서 설치부터 잘하고 싶은 마음이 드는 것이다.

남들은 그냥 `sudo pip install django` 이렇게 하고 넘어갔을 것을 괜시리 깔끔떨며 가상환경이라는 것을 만들어보기로 한다. 그럼 같이 한삽을 같이 퍼보도록 하자.

아래에서 실행한 스크립트들은 **virtualbox에 새로 설치한 ubuntu14.04 LTS**에서 아주 깔끔한 상태로 실행한 것들이다.  다른 Linux에서는 설치하는게 비슷하거나 약간 다를것이고, windows에서는 아~~주 많이 다를것이다. 그러므로 그점을 인지하고 보도록 하자.

사실 OSX는 예전에 정리해놓은 글이 있다. 똑같은걸 두번이나..적다니..ㅠㅠ

[맥에서 쟝고개발환경 만들기](http://gyus.me/?p=240)

###우분투에서 python3 설치
`sudo apt-get install python3-all`

###pip 설치
`sudo apt-get install python-pip `

###virtualenv 설치
virtualenv를 설치하는 이유는 여러가지가 있지만, 내가 아는 바로는 아래 4가지다.

– 파이썬 패키지를 설치할 때 관리자 권한이 아니라 유저 권한으로 설치 하고 싶음.
– 파이썬의 실행 환경을 리눅스의 것과 온전히 구분해서 서버를 깔끔하게 하고 싶음.
– python3을 실행할 때 그냥 python으로 실행하고 싶음.
– 개발환경과 실서버환경을 동일하게 맞추고 싶음.

그럼 설치해보자. (간단간단)

`sudo pip install virtualenv`

###virtualenvwrapper 설치
뭘 이런 헷갈리는걸 또 설치하냐고 물어볼 사람이 있을 것 같은데(나도 그랬음), 그냥 세트라고 생각하고 설치하는게 좋다. virtualenv를 훨씬 사용하기 간편하게 해준다.

`sudo pip install virtualenvwrapper`

###virtualenv 환경 설정
1. 디폴트 디렉토리 만들기 .virtualenv
mkdir ~/.virtualenvs
2. WORKON_HOME 환경 변수에 디폴트 디렉토리 등록하기
export WORKON_HOME=~/.virtualenvs
3. .profile(우분투 기준 유저 로그인시 실행되는 스크립트) 에 virtualenvwrapper를 임포트 하도록
위 파일의 가장 하단에 아래 스크립트 추가

`. /usr/local/bin/virtualenvwrapper.sh`
혹은
`source /usr/local/bin/virtualenvwrapper.sh`

###가상환경 만들어보기

위의 과정을 잘 따라했다면 `virtualenvwrapper.sh` 내에 있는 함수인 `mkvirtualenv` 함수를 사용할 수 있다.

`mkvirtualenv {{가상환경-이름}}`
요렇게 사용한다

`mkvirtualenv py2`

요렇게하면 py2라는 이름의 가상환경이 설치되고 그 가상환경을 사용할 수 있게(workon) 된다.

`which python`
명령어를 실행했을 때 아래와 같은 경로로 나오면 제대로 된것이다.
`/home/user_name/.virtualenvs/py2/bin/python`

가상환경에서 나가려면
`$ deactivate`
와 같이 실행한다

다시 들어가려면
`$ workon py2`
라고 하면된다.

###그럼 python3의 가상환경을 만들고 싶으면?

`virtualenv`가 인식하는 환경변수중에 `VIRTUALENV_PYTHON` 이라는 환경변수가 있는데, 저 변수에 `python3`의 경로를 넣어 주면 된다.

이렇게 해보자.
“`
export VIRTUALENV_PYTHON=`which python3`
mkvirtualenv py3
“`

이렇게 하면 환경변수 안쓰고도 된다!(이진석님 감사합니다.)
“`
mkvirtualenv py3 –python=`which python3`
“`
물론 위의 `which python3`이 제대로 되려면 `python3`이 설치가 되어있어야 한다.
(`sudo apt-get install python3-all`을 위에서 실행한 이유가 그것 때문)

이렇게 하면 파이썬3의 환경으로 가상환경이 만들어졌다.
파이썬 버젼을 확인해보자.
`(py3) ~ $ python -V `
`Python 3.4.0`

요런식으로 나오면 성공~!
긜고 pip3도 pip 로 실행된다.

####아..이제 환경설정이 됐으니 장고를 설치할 수 있다…;;;

### 장고설치
쟝고의 설치는 허무하게도 아래의 한줄

`pip install django`

장고 설치끝~
[/markdown]

[짧은 글]unity-googledrive 플러그인

웹개발 및 서버개발만 하다가 생각에도 없던 유니티를 건들게 되었다.  내가 맡은 부분은 google drive에서 파일을 업로드/다운로드 하는걸 맡았는데, 아래 플러그인으로 하면 간단히(?) 해결된다.
게다가 만드신 분이 한국사람이라 모르면 한국어로 질문해도 됨.
답변이 어마어마하게 빨리달린다. 마지막 커밋이 2년전이긴 하지만, 유지보수는 꾸준히 하고 계신듯.
다만 문서가 영어로 되어있고, 테스트할 때 장벽이 google developer console이라는 장벽이 있는데,  그 부분은 정리가 안되어 있어서, 짧게나마 내가 한 삽질을 정리해서 올림.
유니티 google drive 플러그인
테스트하기
1. Google Developers Console에 어플리케이션을 등록한다.

2. 해당 계정의 데이터에 대한 접근 권한 요청을 보낸다.
  OAuth2.0의 웹 어플리케이션용 클라이언트 ID를 하나 만든다.
URI 리다이렉션에는 http://localhost:9271 를 입력한다.
자바스크립트 시작위치는 디폴트값 그대로 둬도 상관 없음.
3. DriveTest.cs의 아래 코드의 부분에 클라이언트 ID와 보안 비밀을 집어 넣는다.
IEnumerator InitGoogleDrive()
  {
    initInProgress = true;
    drive = new GoogleDrive();
    drive.ClientID = “클라이언트 ID”;
    drive.ClientSecret = “클라이언트 보안 비빌”;
    // 이하 생략
}
4. 유니티에서 DriveTest 씬을 실행해본다.
끝~

리모트 – 사무실 따윈 필요없어!

book_cover_remote 간만에 여유가 좀 생겨서 책도 읽고 하면서 충전중인데, 개발자로서의 삶중에 정말 그랬으면 좋겠다는 소망은 원격근무를 하는거였다. 어느 정도였냐면, 원격근무를 할 수 있다면 내 월급의 10%를 깎아도 기꺼이 하겠다는 마음이 있었었다.

그러던 중에 외국에서는 ruby on rails로 유명한 DHH가 있는 37signals에서 remote라는 책이 나왔고, 우리나라에서도 유명하신 몇몇 분들이 읽었다는 것을 본적이 있는것 같다.

바빠서 그냥 언젠가는 읽어봐야지 하는중에, 한국어 판이 나왔다. ‘임정민’ 이라는 고마우신 분이 매끄럽게 번역을 해주셔서 금방 읽은것 같다. 책 내용 자체는 리모트(원격근무)를 자기네 회사에서는 어떻게 하고 있는지, 원격근무를 하지 않고 있는 회사에서는 어떻게 원격근무를 적용하면 되는지에 대한 내용들이 적혀있다.

예전에는 인프라가 받쳐주지 못해서 원격근무를 할수가 없었다면, 지금은 원격근무를 위한 인프라가 모두 갖춰져 있는데, 안할 이유가 없다는 얘기는 참 동의가 된다. 그리고 기업입장에서도 오피스를 마련하는데 드는비용을 줄일 수 있으며, 개인은 회사에 출근하고 퇴근하는 시간과 노력을 아낄 수 있으니 결과적으로 회사의 생산성이 올라간다는 내용이었다.

뭔가 엄청나게 충격을 주는 내용의 책은 아니었지만, 원격근무를 생각하고 있는 회사가 있다면, 이 책을 참고하면 우려되는 상황은 거의 다 적어져 있기때문에 원격근무를 잘 도입만 하면 되는 거 아닐까 라는 생각을 하게했다.

사실 힘 없는 사원입장에서는 읽어봐야 큰 감흥이 없다..ㅋㅋ
최소한 임원급은 되어야 읽었을 때 회사에 어떻게 적용할지 생각을 하면서 본다고 해야할까… 원격근무도입을 위한 실용서에 가깝기에 나는 그냥 그렇구나~~ 하면서 편하게 보고 금방읽었다.