Sophie writes code

pyenv how-to 정리

2018-04-23

회사에서 apache superset을 분석용도로 커스터마이징해서 비즈니스 유닛이 쓸 수 있도록 개발하고 있다. python 개발은 처음이라 pyenv도 하나도 몰랐는데 문서화하면서 이것저것 배웠다. 개인 목적으로도 pyenv를 쓸 일이 있을 것 같아 블로그에도 정리해두려고 한다.

pyenv를 쓰는 이유?

python 개발을 하다보면 특정 라이브러리에서는 다른 python 버전을 요구하는 경우가 있어서 python 버전을 달리해야 하는 경우가 생긴다. 거기다 프로젝트 별로 다른 라이브러리를 사용하는데 만약 공통 환경에다가 라이브러리를 잔뜩 설치해두고 여러 프로젝트들이 그 환경을 공유하다 보면 문제가 생겼을 때 어떤 라이브러리에서 문제가 생긴것인지 디버깅하기 어렵다. 그래서 프로젝트별로 하나의 밀폐된 버블을 만들어두고 그 환경 안에서 python의 버전을 바꾸거나 라이브러리를 인스톨하는 것이다. pyenv의 nodejs판은 nodebrew가 있다.

Install (MacOS)

MacOS를 쓰고 있다면 python도 pip도 이미 깔려있을 것이다. 그러나 혹시 pip not found를 발견한다면,

1
python -m ensurepip

으로 pip를 설치한다.

1
brew install pyenv-virtualenv

pyenv-virtualenv를 인스톨 후 사용 가능한 python버전을 확인한다.

1
pyenv install --list

나는 python2를 사용할 것이기 때문에 가장 최근 버전인 2.7.14를 설치할 것이다. 설치되는 경로는 /Users/${username}/.pyenv/versions/2.7.14이다.

1
pyenv install 2.7.14

그 다음 2.7.14 버전을 이용한 새로운 환경 (버블)을 만든다. 위 경로에서 새로운 폴더가 추가된다.

1
pyenv virtualenv 2.7.14 ${env_name}

여기까지 한 다음에, 유저의 profile파일에 다음 사항을 추가한다.
(bashrc나 zshrc등.)

1
2
3
4
5
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

# update rc file
source ~./zshrc

이제 드디어 환경 액티베이트!

1
pyenv virtualenv ${env_name}

pyenv, virtualenv, pyenv-virtualenv…. 이게 다 뭐지

  • virtualenv: python 라이브러리를 위한 독립된 python 환경 제공
  • pyenv: 독립된 python 버전 사용을 위한 것
  • pyenv-virtualenv: pyenv와 virtualenv를 동시에 사용할 수 있게 함.
  • virtualenvwrapper: virtualenv의 확장판. 복수의 virtualenv 디렉토리를 만들 때 효과적.
  • pyenv-virtualenvwrapper: pyenv를 위한 플러그인
  • pipenv: Pipfile과 pip, virtualenv를 하나의 커맨드로 합침. virtualenv와 다른 점은 virtualenv는 ~/.local/share/virtualenvs/XXX 디렉토리에 들어가지만 pipenv는 작업 중인 디렉토리에 설치된다는 것.
    pipenv를 사용하는 것을 강추한다고 한다. (출처: https://stackoverflow.com/a/41573588/8465298)

이제 까먹어도 다시 이 포스팅을 보면 된다!

Tags: dev