프로젝트 혹은 가상환경별로 서로 다른 파이썬 버전을 활용하고자 한다면 어떻게 해야 할까요? 파이썬 가상환경을 지원하기 위해 전통적으로 virtualenv 가 많이 사용되어 지는데, 이 때 원하는 버전의 파이썬이 로컬 머신에 설치되어있어야 하는 문제가 있어서 다양한 버전의 파이썬을 사용하기 어려운 단점이 있습니다.
그런데 pyenv 를 활용하면 여러 버전의 파이썬을 로컬 머신에 손쉽게 설치하고 관리할 수 있습니다. 이렇게 설치한 파이썬 버전들을 virtualenv 와 함께 활용하면 서로 다른 가상환경에서 여러 파이썬 버전을 적용할 수 있는 장점이 있습니다. 공식 문서에서는 다음과 같이 표현하고 있습니다.
“simple, unobtrusive, and follows the Unix tradition of single-purpose tools that do one thing well.”
그래서 pyenv 와 pyenv-virtualenv 를 활용해서 여러 버전의 python 을 설치하고 가상환경을 생성하는 방법에 대해서 알아보도록 하겠습니다.
1. Install pyenv
brew 를 이용하면 간편하게 설치할 수 있습니다.
brew install pyenv
그런 다음 설치하고자 하는 버전의 파이썬을 다음과 같이 설치할 수 있습니다(여기서는 3.7.3
버전을 설치하겠습니다).
pyenv install 3.7.3
설치한 3.7.3
버전의 파이썬이 디폴트 파이썬이 되도록 설정해줍시다.
pyenv global 3.7.3
그런 다음 디폴트 설정이 올바르게 되었는지 확인해봅시다.
pyenv version
# 3.7.3 (set by /Users/gim-eunsu/.pyenv/version)
2. Add Shell’s PATH
설치가 완료되었다면 다음 코드를 ~/.zshrc
에 추가해줍시다.
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.zshrc
그런 다음 source ~/.zshrc
명령을 실행하여 쉘 설정을 reload 해주면 .zshrc
에 다음과 같은 코드가 추가되어 있는 것을 확인할 수 있습니다.
# 위 스크립트를 추가한 바로 다음 줄에 아래 코드가 추가되어 있습니다.
if command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init -)"
fi
여기까지 진행되었다면 다음과 같이 python 경로를 검색하면 pyenv 에 의해 manage 되고 있음을 확인할 수 있습니다.
> which python
# /Users/gim-eunsu/.pyenv/shims/python
> python --version
# Python 3.7.3
3. Manage Python Versions
3-1. Add another version
다음 명령을 실행하면 pyenv 에 의해 설치된 파이썬 버전 목록을 확인할 수 있습니다.
> pyenv versions
# system
# * 3.7.3 (set by /Users/gim-eunsu/.pyenv/version)
방금 설치한 3.7.3 버전과 system 버전이 존재하는 것을 확인할 수 있습니다. 이번엔 또 다른 버전을 설치해보겠습니다. pyenv install --list
명령을 실행하면 설치할 수 있는 파이썬 버전들을 확인할 수 있습니다. 여기서는 3.8.0
버전을 추가로 설치하도록 하겠습니다.
pyenv install 3.8.0
이렇게 설치한 3.8.0
버전을 디폴트로 설정해보고, 파이썬 버전 변경이 적용되는지 확인해봅시다.
> pyenv global 3.8.0
> python -V
# Python 3.8.0
만약 특정 로컬 디렉토리에서 사용할 버전을 명시함으로써 글로벌 버전을 오버라이딩 하고 싶다면, local
명령을 실행해주면 됩니다. 이 명령을 실행하면 해당 디렉토리에 .python-version
란 파일이 생성되고 사용하는 파이썬 버전이 명시되어 있습니다.
> pyenv local 3.7.3
> python -V
Python 3.7.3
3-2. Add Virtual Environment
이제 특정 버전을 사용하는 가상환경을 만들어 보도록 하겠습니다. 먼저 아래 명령을 실행해서 pyenv-virtualenv
를 설치해주세요.
brew install pyenv-virtualenv
그런 다음 아래 명령을 실행해서 .zshrc
에 스크립트를 추가해 주도록 합시다.
> echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc
> source ~/.zshrc
그러면 설치가 성공적으로 이뤄집니다. pyenv-virtualenv 를 활용하여 가상환경은 다음과 같이 생성할 수 있습니다. 이 때 지정할 파이썬 버전은 로컬 머신에 설치되어 있어야 합니다.
pyenv virtualenv {$PYTHON_VERSION} {$ENVIRONMENT_NAME}
# 예: pyenv virtualenv 3.7.3 venv_3.7.3
생성한 가상환경을 activate 하는 명령은 다음과 같습니다.
pyenv activate ${ENVIRONMENT_NAME}
# 예: pyenv activate venv_3.7.3
가상환경을 종료하는 명령은 다음과 같습니다.
pyenv deactivate
생성한 가상환경 목록을 확인하는 명령은 다음과 같습니다.
pyenv versions
마지막으로 생성한 가상환경을 삭제하는 명령은 다음과 같습니다.
pyenv uninstall {$ENVIRONMENT_NAME}
# 예: pyenv uninstall venv_3.7.3
Recap
지금까지 pyenv 와 pyenv-virtualenv 를 활용한 파이썬 버전 관리 및 가상환경 생성 방법에 대해 알아보았습니다. 워크플로우를 정리해보면, pyenv 로 로컬 머신에 원하는 파이썬 버전을 설치한 뒤, 해당 버전을 사용하는 가상환경을 생성함으로써 여러 가상환경에서 다양한 파이썬 버전을 사용할 수 있습니다.