pyenv란 무엇일까?
- 파이썬은 버전마다 문법과 라이브러리 호환성이 크게 다르다.
- 그래서 개발자들은 프로젝트마다 서로 다른 파이썬 버전을 사용해야 하는 상황에 자주 놓인다.
- 하지만 시스템에 파이썬을 하나만 설치하면, 버전을 바꿀 때마다 기존 프로젝트가 망가질 위험이 생긴다.
- 이 문제를 해결하기 위해 등장한 것이 바로
pyenv이다. pyenv는 하나의 컴퓨터에서 여러 버전의 파이썬을 동시에 설치하고 관리할 수 있게 해주는 도구이다.- 시스템 전체에 영향을 주지 않고, 프로젝트 단위로 파이썬 버전을 지정할 수 있다.
pyenv는 셸(shell)의PATH를 가로채는 방식으로 작동한다.- 사용자가
python명령을 실행하면,pyenv가 먼저 개입해 어떤 버전을 써야 할지 판단한다. - 이 판단은 환경변수 순서, 로컬(폴더) 설정, 전역 설정으로 우선순위를 갖는다.
- 전역 버전은
pyenv global 3.11.0처럼 설정하고, 특정 프로젝트 폴더에서는pyenv local로 따로 지정한다. - 이렇게 하면 폴더마다 다른 파이썬 버전이 자동으로 활성화된다.
pyenv자체는 파이썬 패키지를 관리하지 않으며, 버전 관리에만 집중한다.
맥북에서 왜 pyenv을 권장할까?
- macOS는 운영체제 자체적으로 파이썬을 필요로 하는 내부 스크립트와 도구들을 가지고 있다.
- 이렇게 시스템에 기본 설치된 파이썬을 시스템 파이썬이라고 부른다.
- 시스템 파이썬은 운영체제의 일부이기 때문에, 사용자가 함부로 수정하거나 삭제하면 시스템이 불안정해질 수 있다.
- 이것이 바로 개발자들이 시스템 파이썬을 직접 쓰지 말고
pyenv로 별도 버전을 설치해야 하는 이유이다. - 시스템 파이썬을 건드리면 의도치 않게 macOS 내부 동작에 영향을 줄 수 있기 때문이다.
pyenv로 설치한 파이썬은 시스템 파이썬과 완전히 분리된 경로에 존재하므로 안전하다.
이제 pyenv를 써야하는 이유는 알았다. 그렇다면 왜 pyenv 설치할 때 환경 변수 설정을 해야할까?
-
터미널에서
python명령어를 입력하면, 컴퓨터는PATH에 등록된 경로를 순서대로 뒤져서 파이썬을 찾는다. -
pyenv를 설치만 하고PATH설정을 하지 않으면, 터미널은 여전히 시스템 파이썬을 먼저 찾아 실행한다. -
즉,
pyenv로 파이썬을 설치해도 실제로는 사용되지 않는 상태가 된다.limjaejoon@imjaejun-ui-MacBookAir ~ % python3 --version Python 3.9.6- 이전에 파이썬 13 버전을 다운 받았지만, 3.9 버전이 나오는 모습이다.
-
환경 변수 설정이란,
PATH의 맨 앞에pyenv경로를 추가하는 작업이다. -
이렇게 하면
python명령어를 입력했을 때 시스템 파이썬보다pyenv가 먼저 개입하게 된다. -
pyenv는 개입한 뒤, 현재 전역 또는 로컬 설정에 맞는 파이썬 버전을 골라 실행한다. -
이 설정을
.zshrc에 작성하는 이유는, 터미널을 열 때마다 자동으로 적용되게 하기 위해서이다. -
결국
pyenv설치는 파이썬 버전들을 컴퓨터에 내려받는 작업이고, 환경 변수 설정은 그것을 실제로 사용할 수 있게 연결하는 작업이다.limjaejoon@imjaejun-ui-MacBookAir ~ % python3 --version Python 3.13.12
궁금한 점이 생겼다. 지금까지 다양한 프로그램을 설치했지만, 환경 변수를 직접 해줘야하는 경우가 많지 않았다.
- 프로그램을 설치할 때, 설치 방식에 따라 환경 변수 설정이 자동으로 되기도 하고 수동으로 해야 하기도 한다.
- 예를 들어, Node.js를 공식 홈페이지 인스톨러(.pkg)로 설치하면, 설치 과정에서 자동으로
/usr/local/bin에 실행 파일을 복사한다. /usr/local/bin은 macOS가 기본적으로PATH에 포함시켜 놓은 경로이다.- 그래서 별도 설정 없이도 터미널에서 node 명령어가 바로 작동하는 것이다.
- 반면
pyenv는 설치 후 실행 파일을 공용 경로에 두지 않고, 자기만의 독립적인 경로에 파이썬을 관리한다. - 게다가
pyenv는 단순히 실행 파일을 제공하는 것이 아니라, 명령어를 가로채서 버전을 선택하는 방식으로 작동한다. - 이 가로채기 구조가 작동하려면,
PATH의 맨 앞에pyenv를 명시적으로 올려줘야 한다. - 정리하자면, 환경 변수 설정이 필요 없는 프로그램은 설치 시 알아서 공용 경로에 자신을 등록한다.
- 환경 변수 설정이 필요한 프로그램은 공용 경로를 사용하지 않거나,
PATH순서 자체가 작동 방식에 영향을 주는 경우이다.
macOS는 기본으로 PATH에 포함시키는 경로들을 어떻게 확인할까?
/etc/paths라는 시스템 파일에/usr/local/bin,/usr/bin,/bin등이 기본 경로로 등록되어 있다.limjaejoon@imjaejun-ui-MacBookAir ~ % cat /etc/paths /usr/local/bin /System/Cryptexes/App/usr/bin /usr/bin /bin /usr/sbin /sbin- 이 파일은 모든 사용자에게 공통으로 적용되며, 터미널이 시작될 때 자동으로 읽힌다.
- 즉,
.zshrc에 아무것도 없어도 기본PATH는 이미 설정된 상태로 터미널이 열린다. .zshrc는 그 기본PATH위에 추가적인 경로를 덧붙이는 역할을 한다.