- 여러 버전의 Python 사이를 쉽게 전환할 수 있게 해줌
- 단순하고, 눈에 띄지 않으며, 잘 동작하는 단일 목적의 UNIX 전통 도구를 따름
- 이 프로젝트는 rbenv와 ruby-build에서 분기되어 Python에 맞게 수정됨
pyenv가 하는 일
- 사용자 기반으로 전역 Python 버전 변경 가능.
- 프로젝트별 Python 버전 지원.
- 환경 변수를 사용하여 Python 버전 오버라이드 가능.
- 한 번에 여러 버전의 Python 명령을 검색할 수 있음. tox를 사용하여 Python 버전 간에 테스트하는 데 유용함.
pyenv가 하지 않는 일...
- Python 자체에 의존하지 않음. pyenv는 순수 쉘 스크립트로 만들어짐.
- 쉘에 로드될 필요가 없음. 대신,
PATH에 디렉토리를 추가하는 shim 접근 방식을 사용함. - virtualenv 관리하지 않음. 물론, 사용자가 직접 virtualenv를 생성하거나 pyenv-virtualenv를 사용하여 자동화할 수 있음.
작동 원리
- pyenv는
PATH에 주입된 shim 실행 파일을 사용하여 Python 명령을 가로채고, 애플리케이션이 지정한 Python 버전을 결정한 후, 해당 Python 설치로 명령을 전달함.
PATH 이해하기
python이나pip같은 명령을 실행할 때, 운영 체제는PATH환경 변수에 있는 디렉토리 목록에서 해당 이름의 실행 파일을 찾음.
Shims 이해하기
- pyenv는
PATH의 맨 앞에 shims 디렉토리를 삽입함. rehashing 과정을 통해, 모든 설치된 Python 버전의 모든 Python 명령에 대해 shims를 유지함.
Python 버전 선택 이해하기
- shim을 실행할 때, pyenv는 다음 소스에서 순서대로 Python 버전을 읽어서 사용함:
PYENV_VERSION환경 변수(지정된 경우).- 현재 디렉토리의 애플리케이션별
.python-version파일(있는 경우). - 파일 시스템의 루트에 도달할 때까지 각 부모 디렉토리를 검색하여 찾은 첫 번째
.python-version파일(있는 경우). - 전역
$(pyenv root)/version파일.
Pyenv가 제공하는 Python 설치 위치 찾기
- pyenv가 결정한 Python 버전에 따라 명령을 해당 Python 설치로 전달함.
- 각 Python 버전은
$(pyenv root)/versions아래 자체 디렉토리에 설치됨.
사용법
추가 Python 버전 설치
pyenv install을 사용하여 추가 Python 버전을 설치함.
최신 버전으로 자동 해결
uninstall을 제외한 모든 Pyenv 하위 명령은 최신 버전으로 전체 접두사를 자동으로 해결함.
확장 지원이 있는 Python 버전
- 특정 환경에서 지원을 추가하기 위해 사용자 제공 패치를 적용하는 Python 릴리스가 있음.
Python 버전 간 전환
- Pyenv가 설치한 Python을 사용하려면 다음 명령 중 하나를 실행함:
pyenv shellpyenv localpyenv global
Python 버전 제거
- 시간이 지남에 따라
$(pyenv root)/versions디렉토리에 Python 버전이 쌓임. - 오래된 Python 버전을 제거하려면
pyenv uninstall을 사용함.
기타 작업
- 모든 사용 가능한 하위 명령 목록을 보려면
pyenv commands를 실행함.
pyenv 제거
- Pyenv를 임시로 비활성화하거나 시스템에서 제거하기 쉬움.
Pyenv 플러그인
- 플러그인을 사용하여 Pyenv의 기능을 간단하고 유연하며 유지 관리 가능한 방식으로 확장하고 사용자 정의할 수 있음.
고급 구성
- Pyenv의 동작을 제어하는 환경 변수가 있음.
개발
- Pyenv 소스 코드는 GitHub에서 호스팅됨.
- Bats를 사용하여 테스트를 실행함.
GN⁺의 의견
- pyenv는 다양한 Python 버전을 관리하는 데 매우 유용한 도구임. 특히 여러 프로젝트에서 다른 버전의 Python을 사용해야 하는 개발자에게 도움이 됨.
- 이 도구는 Python 자체에 의존하지 않고 순수 쉘 스크립트로 구성되어 있어, Python이 설치되지 않은 시스템에서도 설치와 관리가 가능함.
- pyenv는 virtualenv를 직접 관리하지 않지만, pyenv-virtualenv 플러그인을 통해 virtualenv 관리를 자동화할 수 있어 편리함.
- 설치 및 사용법이 상대적으로 간단하므로, Python 버전 관리가 필요한 초급 소프트웨어 엔지니어도 쉽게 접근할 수 있음.
- pyenv와 유사한 기능을 제공하는 다른 도구로는
conda가 있으며, 특히 데이터 과학과 머신러닝 분야에서 널리 사용됨.conda는 패키지 관리와 환경 관리를 함께 제공하므로, 이러한 기능이 필요한 사용자에게 추천할 수 있음. - pyenv를 도입할 때는 시스템에 여러 버전의 Python이 설치되어 있을 경우 경로 충돌을 피하기 위해 주의가 필요함. pyenv를 사용함으로써 얻는 이점은 버전 관리의 용이성이지만, 잘못된 설정은 시스템의 기본 Python 경로를 방해할 수 있음.