pyenv를 사용하여 Python 버전 관리하기

pyenv를 사용하여 Python 버전 관리하기

2023-03-02 hit count image

동일한 머신에서 여러 Python 버전을 사용하기 위해 pyenv를 사용하는 방법에 대해서 알아보겠습니다.

개요

여러 Python 프로젝트를 하나의 머신(PC)에서 개발하다보면, 각각의 프로젝트에서 사용하는 Python 버전에 따라 개발 환경을 구축해야할 경우가 있습니다.

이때, 매번 Python을 지우고 해당 프로젝트에 필요한 Python 버전을 설치할 수는 없습니다. 이번 블로그 포스트에서는 pyenv를 사용하여 하나의 머신에서 다양한 Python 버전을 설치하고 관리하는 방법에 대해서 알아보도록 하겠습니다.

pyenv 설치

다음 명령어를 사용하여 pyenv를 설치합니다.

  • macOS: brew install pyenv
  • Windwos: choco install pyenv-win

macOS인 경우, .zshrc 파일을 열고 다음과 같은 내용을 추가합니다.

# code ~/.zshrc
...
# pyenv setting
eval "$(pyenv init --path)"
eval "$(pyenv init -)"

pyenv-virtualenv 설치

pyenv-virtualenvpyenv의 플러그인으로 Python의 가상 환경을 만들 수 있게 도와주는 플러그인입니다.

그럼 다음 명령어를 실행하여 pyenv-virtualenv를 설치합니다.

  • macOS: brew install pyenv-virtualenv
  • Windows: pip install pyenv-virtualenv

macOS인 경우, .zshrc 파일을 열고 다음과 같은 내용을 추가합니다.

# code ~/.zshrc
...
# pyenv-virtualenv setting
eval "$(pyenv virtualenv-init -)"

Python 버전 리스트

다음 명령어를 실행하여 pyenv로 설치 가능한 Python 버전을 확인합니다.

pyenv install --list

그럼 다음과 같이 설치 가능한 Python의 버전 리스트를 확인할 수 있습니다.

...
stackless-3.2.5
stackless-3.3.5
stackless-3.3.7
stackless-3.4-dev
stackless-3.4.2
stackless-3.4.7
stackless-3.5.4
stackless-3.7.5

Python 3.9.9 설치

이번 블로그 포스트에서는 Python 3.9.9 버전을 설치해 보도록 하겠습니다. 다음 명령어를 실행하여 Python 3.9.9 버전을 설치합니다.

pyenv install 3.9.9

pyenv versions

설치가 완료되었다면, 다음 명령어를 실행하여 설치된 Python 버전을 확인합니다.

pyenv versions

그럼 다음과 같이 방금 설치한 Python 3.9.9를 확인할 수 있습니다.

* system (set by /.pyenv/version)
  3.9.9

pyenv version

다음 명령어를 실행하면 현재 사용중인 Python 버전을 확인할 수 있습니다.

pyenv version

그럼 다음과 같이 현재 사용중인 버전을 확인할 수 있습니다.

system (set by /Users/dev-yakuza/.pyenv/version)

설치한 Python 버전 사용하기

이제 pyenv로 설치한 Python 버전을 사용하는 방법에 대해서 알아봅시다. 다음 명령어를 실행하면 Python 3.9.9를 전역적으로 사용할 수 있습니다.

pyenv global 3.9.9

다음 명령어를 사용하면 현재 프로젝트에만 적용할 수 있습니다.

pyenv local 3.9.9

이 명령어는 .python-version 파일을 생성하고 개발 환경에 pyenv가 활성화되어 있는 경우, 자동으로 해당 버전을 사용하도록 변경해 줍니다.

다음 명령어를 사용하면 현재 shell에서만 해당 버전을 사용할 수 있습니다.

pyenv shell 3.9.9

Python 가상 환경 생성

여러 프로젝트가 동일한 Python 버전을 사용하지만, 설치하는 라이브러리의 버전이 다를 수 있습니다. 이럴 경우, 의도하지 않은 버전의 라이브러리가 사용되어 문제를 발생 시킬 수 있습니다.

이럴 때, 동일한 버전의 Python을 사용하여 각각의 프로젝트용 가상 환경을 만들고, 그 가상 환경위에서 개발을 하면 이 문제를 해결할 수 있습니다.

그럼 pyenv-virtualenv을 사용하여 가상 환경을 만들어 봅시다. 다음 명령어를 사용하여 Python 가상 환경을 생성합니다.

# pyenv virtualenv VERSION NAME
pyenv virtualenv 3.9.9 venv

생성이 완료되었다면 다음 명령어를 사용하여 Python 가상 환경이 잘 생성되었는지 확인합니다.

pyenv versions

그럼 다음과 같이 가상 환경이 잘 생성된 것을 확인할 수 있습니다.

* system (set by /.pyenv/version)
  3.9.9
  3.9.9/envs/venv
  venv

이제 다음 명령어를 사용하여 pyenv-virtualenv로 생성한 가상 환경을 활성화 시켜봅니다.

pyenv activate venv

그런 다음 다시 다음 명령어를 실행하여 가상 환경이 활성화되었는지 확인해 봅니다.

pyenv versions

문제가 없다면 다음과 같이 가상 환경이 잘 활성화된 것을 확인할 수 있습니다.

  system
  3.9.9
  3.9.9/envs/venv
* venv (set by PYENV_VERSION environment variable)

가상 환경위에서 모든 작업을 끝냈다면, 다음 명령어를 실행하여 가상 환경을 비활성화시킬 수 있습니다.

pyenv deactivate

다시 다음 명령어를 실행하여 가상 환경이 잘 비활성화되었는지 확인해 봅니다.

pyenv versions

그럼 다음과 같이 가상 환경이 비활성화된 것을 확인할 수 있습니다.

* system (set by /.pyenv/version)
  3.9.9
  3.9.9/envs/venv
  venv

.python-version 파일

앞서 pyenv local 명령어를 실행하면 자동으로 .python-version 파일이 생성되는 것을 확인할 수 있었습니다. 이를 통해, pyenv를 사용하는 개발 환경에서는 자동으로 Python의 버전을 변경해 줍니다. 만약 해당 Python 버전이 없는 경우 다음 명령어를 사용하여 .python-version에 작성된 Python 버전을 설치할 수 있습니다.

pyenv install

그러므로 이 .python-version 파일을 사용하면 해당 프로젝트를 실행하기 위한 Python의 버전을 공유할 수 있습니다. 만약, 현재 프로젝트의 .python-version 파일이 없는 경우, .python-version 파일을 만들고 다음과 같이 해당 프로젝트에서 필요로 하는 Python의 버전을 작성합니다.

3.9.9

Python 버전 삭제하기

머신에서 더이상 사용하지 않는 Python 버전이나 Python 가상 환경이 있는 경우, 다음 명령어를 사용하여 해당 버전(가상 환경)을 제거할 수 있습니다.

pyenv uninstall 3.9.9
# pyenv uninstall venv

완료

이것으로 pyenv를 사용하여 동일한 머신에 다양한 Python 버전을 사용하는 방법에 대해서 알아보았습니다. 또한 pyenv-virtualenv 플러그인을 사용하여 Python의 가상 환경을 구성하는 방법에 대해서도 알아보았습니다. 만약, 여러분이 다양한 Python 버전의 개발 환경이 필요한 경우 pyenv를 사용하여 버전 관리를 해보시길 바랍니다.

제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!

앱 홍보

책 홍보

스무디 한 잔 마시며 끝내는 React Native 책을 출판한지 벌써 2년이 다되었네요.
이번에도 좋은 기회가 있어서 스무디 한 잔 마시며 끝내는 리액트 + TDD 책을 출판하게 되었습니다.

아래 링크를 통해 제가 쓴 책을 구매하실 수 있습니다.
많은 분들에게 도움이 되면 좋겠네요.

스무디 한 잔 마시며 끝내는 React Native, 비제이퍼블릭
스무디 한 잔 마시며 끝내는 리액트 + TDD, 비제이퍼블릭
[심통]현장에서 바로 써먹는 리액트 with 타입스크립트 : 리액트와 스토리북으로 배우는 컴포넌트 주도 개발, 심통
Posts