본문 바로가기
파이썬

pyenv란? pyenv 사용하기

by 책 읽는 개발자_테드 2022. 7. 9.
반응형

이 글은 다음 글을 번역하여 정리한 글입니다.

https://realpython.com/intro-to-pyenv/

 

 

목차

· pyenv란?

· pyenv 설치하기

· 파이썬을 설치하기 위해 pyenv 사용하기

· pyenv로 사용할 파이썬 버전 지정하기

· 가상 환경과 pyenv


pyenv란?


· pyenv는 다양한 버전의 파이썬을 관리하는 도구다.

· pyenv를 사용하면 올바른 버전의 파이썬을 사용하는 데 드는 시간을 최소화하여, 프로젝트에 들이는 시간을 최대화 할 수 있다.

· pyenv를 사용하면 편리한 상황

1. 다양한 버전의 파이썬을 지원해야 하지만, 모든 버전을 쉽게 테스트 하는 방법을 확신하지 못할 때

2. 최신 버전의 파이썬의 새로운 기능을 사용해보고 싶지만, 개발 환경을 엉망으로 만들까봐 걱정될 때

3. 다른 버전의 파이썬을 지원하는 프로젝트에 기여하고 싶을 때

 

시스템 파이썬(System Python)

· 시스템 파이썬은 os에 설치되어 제공되는 파이썬이다. 해당 파이썬은 모든 사용자가 사용할 수 있다.

· 시스템 파이썬에 패키지를 설치하려면 sudo pip install을 실행하면 된다. 이는 파이썬 패키지를 전역적으로 설치한다.

· 리눅스나 맥의 경우 기본적으로 터미널에 python을 입력하면, Python REPL을 얻을 수 있다.

- REPL: 콘솔 화면에서 구문을 입력하면 바로 결과를 반환하고, 다시 입력할 수 있는 도구

 

System Python의 문제점

· sudo pip install로 모든 사용자가 사용할 수 있는 패키지를 설치하지만, 사용자들이 서로다른 패키지 버전을 원할 수 있다.

· 같은 패키지의 여러 버전은 예상치 못한 문제를 일으킬 수 있다.

· os에 설치된 파이썬 버전이 너무 오래되었을 수 있다.

· 일부 os는 실제로 작동을 위해 파이썬을 사용할 수 있다. 이때, 파이썬을 신중하게 설치하지 않으면 os 사용 능력이 심각하게 손상될 수 있다.

ex) yum을 사용하면 python을 많이 사용하여 작업을 수행한다.

 

패키지 매니저

· 패키지 매니저는 패키지를 시스템에 설치하는 방법이다. ex) apt, yum, brew, port 등

· 패키지 매니저를 사용해도, 시스템 파이썬과 동일한 문제가 발생한다.

- 패키지 매니저는 패키지를 사용자 공간(user space) 대신에 전역 시스템 공간(global system space)에 설치한다. 이러한 시스템 수준 패키지는 개발 환경을 오염시키고, 다른 사람과 작업 공간을 공유하기 어렵게 만든다.

- 여전히 설치할 수 있는 파이썬 버전을 제어할 수 없다.

 

· 이런 제약 조건을 볼 때, 파이썬 버전을 쉽고 유연하게 설치하고 관리하는 기준을 다음과 같다.

1. 파이썬을 사용자 공간에 설치한다.

2. 다양한 버전의 파이썬을 설치한다.

3. 사용자가 원하는 정확한 버전의 파이썬을 지정한다. 

4. 설치된 버전 간에 전환이 가능하다.

· pyenv를 사용하면 이러한 모든 작업과 그 이상의 작업을 수행할 수 있다.

 

pyenv 설치하기


· pyenv를 설치하기 전 os에 맞는 종속성이 필요하다.

- 이러한 종속성들은 대부분 C로 작성된 개발 도구이며, pyenv가 해당 소스에서 빌드하여 파이썬을 설치하기 때문에 필요하다. 

 

ubuntu/Debian

$ sudo apt-get install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev \
libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl

 

Fedora/CentOS/RHEL

$ sudo yum install gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite \
sqlite-devel openssl-devel xz xz-devel libffi-devel

 

MacOS

$ brew install openssl readline sqlite3 xz zlib

 

· 빌드 종속성을 설치한 후 pyenv-installer를 설치한다.

$ curl https://pyenv.run | bash

 

- pyenv-installer를 설치하면, pyenv를 따라 몇 가지 유용한 플러그인이 설치된다.

1. pyenv: 실제 pyenv 애플리케이션

2. pyenv-virtualenv: pyenv와 가상 환경에 대한 플러그인

3. pyenv-update: pyenv를 업데이트 하기 위한 플러그인

4. pyenv-doctor: pyenv와 빌드 종속성이 설치되었는지 확인하는 플러그인

5. pyenv-which-ext: 자동으로 시스템 명령을 조회하는 플러그인

 

설치를 완료하면, 다음과 같은 문구가 화면에 나타난다.

 

출력 결과는 사용자의 셸에 따라 다를 수 있다. 그러나 pyenv를 사용자의 경로에 추가하고, pyenv/pyenv-virtualenv 자동 완성을 초기화하려면 명령어를 따라야한다. 이 작업을 완료하기 위해 셸을 다시 로드한다.

$ exec "$SHELL"

 

파이썬을 설치하기 위해 pyenv 사용하기


pyenv를 설치했으므로, 다음 단계로 파이썬을 설치한다. 설치할 수 있는 많은 버전의 파이썬이 존재하며, 이용가능한 파이썬의 버전들을 확인하기 위해 다음 명령어를 사용할 수 있다. 

ex) 다음 명령은 이용 가능한 CPython 3.6 ~ 3.7 사이의 버전을 보여준다.

$ pyenv install --list | grep " 3\.[678]"

마찬가지로 모든 Jython 버전을 보려면 다음을 수행한다.

$ pyenv install --list | grep "jython"

 

pyenv가 제공하는 모든 파이썬 버전을 보려면 다음을 수행한다.

$ pyenv install --list

 

* 원하는 버전이 존재하지 않으면, pyenv update 명령을 실행하여 도구를 업데이트한다. 이렇게하면 pyenv가 최신 버전의 파이썬에 액세스할 수 있다.

 

원하는 버전이 존재하면, 다음 명령을 통해 설치할 수 있다.

$ pyenv install 3.10.4

 

설치 위치

pyenv는 소스에서 파이썬을 빌드하여 작동한다. 설치한 각 버전은 pyenv 루트 디렉터리에 존재한다.

$ ls ~/.pyenv/versions/

 

삭제를 원하는 버전이 존재하면, 다음 명령을 수행한다.

$ rm -rf ~/.pyenv/versions/2.7.14

 

OR

 

$ pyenv uninstall 2.7.14

 

pyenv로 사용할 파이썬 버전 지정하기


다음 명령어로 설치한 파이썬 버전을 확인한다.

$ pyenv versions

 

‘*’는 현재 활성 상태일 파이썬 버전을 나타낸다. 또한 루트 pyenv 디렉터리에 있는 파일에 의해 설정되었음을 알 수 있다.

 

which 명령어를 사용하면, 현재 사용 중인 파이썬 인터프리터의 위치를 알 수 있다.

$ which python

 

이제 특정 파이썬 버전을 지정하여 사용해보자. 다음 명령어로 파이썬 2.7.14을 사용할 수 있다.

$ pyenv global 2.7.14
$ python -V

$ pyenv versions

 

내장된 테스트 제품군을 실행하여 새롭게 설치한 파이썬이 제대로 동작하는지 확인할 수 있다.

$ python -m test

 

pyenv는 자신을 PATH에 삽입하고, OS의 관점에서 호출되는 실행 파일이다. 실제 경로를 보려면 다음을 실행할 수 있다.

$ pyenv which python

 

기본 파이썬의 시스템 버전으로 돌아가려면 다음을 실행할 수 있다.

$ pyenv global system

 

pyenv 명령어들 

pyenv는 많은 명령어들을 제공한다. 다음 명령어로 해당 명령어들의 목록을 볼 수 있다.

각 명령어는 –help 플래그를 갖는다. 이를 통해 더 자세한 정보를 얻을 수 있다.

$ pyenv shims --help

help 메세지는 명령어의 용도, 명령어와 함께 사용할 수 있는 옵션에 대해 설명한다. 

 

install

특정 버전의 파이썬을 설치하는 데 사용하는 명령이다. 

ex) 파이썬 3.6.8 버전 설치

$ pyenv install 3.6.8

 

versions

현재 설치된 모든 파이썬 버전을 표시하는 명령이다.

$ pyenv versions

 

다음 명령을 사용하면 현재 활성 중인 버전을 알 수 있다.

$ pyenv version

 

which

 

실행 파일의 전체 경로를 결정하는데 유용한 명령이다. pyenv는 shim을 사용하여 작동하기 때문에 이 명령을 사용하면 실행 중인 pyenv 실행 파일의 전체 경로를 볼 수 있다.

ex) pip이 설치된 위치 확인

$ pyenv which pip

 

global

전역 파이썬 버전을 설정하는 명령이다. 기본적으로 특정 파이썬 버전을 사용하도록 하는 데 유용하고, 다른 명령으로 재정의될 수 있다.

ex) 기본 파이썬 버전을 3.6.8로 설정

$ pyenv global 3.6.8



local

애플리케이션별 파이썬 버전을 설정하는 데 사용된다. 

ex) 파이썬 2.7.15 버전을 사용하도록 설정

$ pyenv local 2.7.15

 

해당 커맨드는 현재 디렉토리에 .python-version 파일을 생성한다. 환경에 pyenv가 활성화되어 있으면, 이 파일이 자동으로 해당 버전을 활성화한다.



shell

셸별 파이썬 버전을 설정하는 데 사용된다. 

ex) 파이썬 3.8-dev 버전을 사용하도록 설정

$ pyenv shell 3.8-dev

 

해당 커맨드는 PYENV_VERSION 환경 변수를 설정하여 지정된 버전을 활성화한다.  해당 명령을 가지고 있는 모든 응용 프로그램이나 전역 설정을 덮어쓴다. 비활성화하려면 –unset 플래그를 사용할 수 있다.

 

파이썬 버전 지정하기

파이썬 버전을 지정하는 여러 가지 pyenv 명령이 있다. 여러 가지 명령을 순서대로 실행할 때, 파이썬 버전은 어떤 명령에 의해 수정될까.

명령의 우선순위는 아래와 같다.

 

실습으로 알아보자. 다음과 같이 처음에는 시스템 파이썬이 활성 상태인 상태다.

$ pyenv versions

 

다음으로 가장 전역적인 설정을 사용해보자. 이를 위해 global 명령을 실행한다.

$ pyenv global 2.7.14
$ pyenv versions

 

~/.pyenv/version 파일에는 변경된 파이썬 버전이 저장된다.

$ cat ~/.pyenv/version

 

다음으로 local 명령을 통해 파이썬 버전을 변경해보자.

$ pyenv local 2.7.16
$ pyenv versions

 

.python-version 파일에는 변경된 파이썬 버전이 저장된다.

$ cat .python-version

 

.python-version 파일의 검색은 재귀적(recursive)이다. 즉, .python-version 파일의 파이썬 버전은 해당 파일 위치의 하위 디렉토리에도 적용된다. 

$ mkdir subdirectory
$ cd subdirectory
$ pyenv versions

위와 같이 하위 디렉터리에 .python-version 파일이 없음에도 여전히 파이썬 버전은 local 명령어로 설정한 2.7.16으로 지정된다.

 

마지막으로 shell 명령어를 통해 파이썬 버전을 변경해보자. 

$ pyenv shell 3.10.4
$ pyenv version

 

shell 명령어 설정을 취소하려면, 다음 명령어를 수정하면된다.

$ pyenv shell --unset

 

가상 환경과 pyenv

가상 환경은 파이썬 설치와 애플리케이션을 관리하는 큰 부분이다. 

TODO: 파이썬 가상 환경 입문하기

 

pyenv는 pyenv-virtualenv라고 하는 멋진 플러그인이 있다. 해당 플러그인은 여러 파이썬 버전과 여러 가상 환경에서 용이하게 작업할 수 있도록 한다.

 

· pyenv는 다양한 버전의 파이썬을 관리한다. 

· virtualenv/venv는 특정 파이썬 버전을 위한 가상 환경을 관리한다.

· pyenv-virtualenv는 다양한 파이썬 버전을 위한 가상 환경을 관리한다.

- pyenv-virtualenv는 다양한 파이썬 버전이 필요한 여러 환경 간에 전환이 필요할 때 유용하다.

 

앞서 pyenv-installer 스크립트를 사용하여 pyenv를 설치했기 때문에 pyenv-virtualenv를 사용한 준비는 이미 되어 있다.

 

다음 명령을 통해 가상 환경을 생성한다.

$ pyenv virtualenv <python_version> <environment_name>

 

· <pyhon_version>은 선택사항이지만, 사용 중인 파이썬 버전을 확신할 수 있도록 항상 지정하는 것을 고려하자.

· <environment_name>은 환경을 분리하는 데 도움이 되는 이름일 뿐이다. 환경의 이름을 프로젝트와 동일한 이름으로 지정하는 것이 좋다. 

 

예를 들어 myproject에서 작업 중이고, 파이썬 3.9.10일 사용해 개발하려는 경우 다음 명령을 실행한다.

$ pyenv virtualenv 3.9.10 myproject

 

가상 환경 활성화하기

 

방금 생성한 가상 환경을 다음 명령을 통해 활성화할 수 있다.

$ pyenv local myproject

 

앞서 local 명령을 사용한 것과 다르게 파이썬 버전을 지정하는 대신 환경을 지정한다. 이렇게 하면 현재 작업 디렉터리에 .python-version 파일이 생성되고, 사용자 환경에서 eval “$(pyenv virtualenv-init -)”을 실행했기 때문에 환경이 자동으로 활성화된다. 

 

파이썬 버전이 제대로 지정되었는지 다음 명령으로 확인해보자.

$ pyenv which python

 

다음 명령을 통해 해당 환경에서 제공하는 실행 파일을 확인할 수 있다.

$ pyenv which pip

 

셸에서 실행하도록 eval “$(pyenv virtualenv-init -)”을 구성하지 않은 경우 다음 명령을 통해 파이썬 버전을 수동으로 활성화/비활성화할 수 있다.

$ pyenv activate <environment_name>
$ pyenv deactivate

 

 

다양한 환경에서 작업하기

앞서 배운 내용을 종합하면 여러 환경에서 효과적으로 작업할 수 있다. 다음 버전들이 설치되어 있다고 가정해 보자.

 

적절하게 명명된 두 개의 서로 다른 프로젝트에서 작업한다고 가정한다. 

1. project1은 파이썬 2.7.14 및 3.8.13을 지원한다.

2. project2은 파이썬 3.8.13 및 3.10.4를 지원한다.

 

현재는 system 파이썬을 사용하고 있다. 먼저 첫 번째 프로젝트에 대한 가상 환경을 만든다.

$ mkdir project1
$ cd project1/
$ pyenv which python

$ pyenv virtualenv 2.7.14 project1

$ pyenv local project1
$ python -V

 

가상환경을 지우려면, 다음과 같은 명령을 실행한다.

$ pyenv uninstall 2.7.14/envs/project1

 

project1 디렉터리에서 나와서 project2를 생성하고, 해당 프로젝트를 위한 가상 환경을 만든다.

$ mkdir project2
$ cd project2/
$ pyenv which python

$ pyenv virtualenv 3.8.13 project2
$ pyenv local project2
$ python -V

 

이렇게하면, 더 이상 환경 활성화를 기억하지 않아도 된다. 모든 프로젝트 간에 전환할 수 있으며 pyenv는 올바른 파이썬 버전과 가상 환경을 자동으로 활성화한다.

 

다양한 버전을 동시에 활성화하기

project2는 파이썬 3.8.13을 사용하고있다. 해당 환경에서 파이썬 3.10 버전 사용할 수 있는지 확인하고 싶다면, 다음과 같이 명령어를 실행하면된다. 

 

$ python3.10 -V

 

pyenv는 현재 활성 환경에서 Python 3.10을 사용할 수 없지만, 다른 환경에서 사용할 수 있음을 말해준다. 이제 pyenv를 통해 여러 환경을 활성화해보자.

$ pyenv local project2 3.10.4

 

위 명령은 pyenv가 가상 환경 project2를 첫 번째 옵션으로 사용하라는 의미다. 다시 python3.10 명령을 실행해보자.

$ python3.10 -V

 

pyenv는 3.10 명령어를 찾아 실행할 수 있다. 이는 PATH에서 여러 버전의 파이썬을 사용할 수 있어야하는 tox 같은 도구에 유용할 수 있다.

 

(tox을 사용한다면, tox-pyenv 패키지를 확인해보자.)

반응형

댓글