Published on

Pyenv로 MacOS에서 파이썬 버전 관리하기

Authors

프로젝트 혹은 가상환경별로 서로 다른 파이썬 버전을 활용하고자 한다면 어떻게 해야 할까요? 파이썬 가상환경을 지원하기 위해 전통적으로 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 로 로컬 머신에 원하는 파이썬 버전을 설치한 뒤, 해당 버전을 사용하는 가상환경을 생성함으로써 여러 가상환경에서 다양한 파이썬 버전을 사용할 수 있습니다.

References