프로필 로고
2026-04-02

pyenv 설치하고 환경 변수 설정해야 하는 이유

그동안 노트북에 다양한 프로그램들을 설치할 때, 가끔 터미널을 켜서 환경 변수라는 것을 설정한 적이 있다. 이번 포스트에서 pyenv라는 프로그램을 설치하며 그 이유에 대해서 정리해보자.

  • pyenv
  • 환경 변수
  • zshrc

pyenv란 무엇일까?

  1. 파이썬은 버전마다 문법과 라이브러리 호환성이 크게 다르다.
  2. 그래서 개발자들은 프로젝트마다 서로 다른 파이썬 버전을 사용해야 하는 상황에 자주 놓인다.
  3. 하지만 시스템에 파이썬을 하나만 설치하면, 버전을 바꿀 때마다 기존 프로젝트가 망가질 위험이 생긴다.
  4. 이 문제를 해결하기 위해 등장한 것이 바로 pyenv이다.
  5. pyenv는 하나의 컴퓨터에서 여러 버전의 파이썬을 동시에 설치하고 관리할 수 있게 해주는 도구이다.
  6. 시스템 전체에 영향을 주지 않고, 프로젝트 단위로 파이썬 버전을 지정할 수 있다.
  7. pyenv는 셸(shell)의 PATH를 가로채는 방식으로 작동한다.
  8. 사용자가 python 명령을 실행하면, pyenv가 먼저 개입해 어떤 버전을 써야 할지 판단한다.
  9. 이 판단은 환경변수 순서, 로컬(폴더) 설정, 전역 설정으로 우선순위를 갖는다.
  10. 전역 버전은 pyenv global 3.11.0처럼 설정하고, 특정 프로젝트 폴더에서는 pyenv local로 따로 지정한다.
  11. 이렇게 하면 폴더마다 다른 파이썬 버전이 자동으로 활성화된다.
  12. pyenv 자체는 파이썬 패키지를 관리하지 않으며, 버전 관리에만 집중한다.

맥북에서 왜 pyenv을 권장할까?

  1. macOS는 운영체제 자체적으로 파이썬을 필요로 하는 내부 스크립트와 도구들을 가지고 있다.
  2. 이렇게 시스템에 기본 설치된 파이썬을 시스템 파이썬이라고 부른다.
  3. 시스템 파이썬은 운영체제의 일부이기 때문에, 사용자가 함부로 수정하거나 삭제하면 시스템이 불안정해질 수 있다.
  4. 이것이 바로 개발자들이 시스템 파이썬을 직접 쓰지 말고 pyenv로 별도 버전을 설치해야 하는 이유이다.
  5. 시스템 파이썬을 건드리면 의도치 않게 macOS 내부 동작에 영향을 줄 수 있기 때문이다.
  6. pyenv로 설치한 파이썬은 시스템 파이썬과 완전히 분리된 경로에 존재하므로 안전하다.

이제 pyenv를 써야하는 이유는 알았다. 그렇다면 왜 pyenv 설치할 때 환경 변수 설정을 해야할까?

  1. 터미널에서 python 명령어를 입력하면, 컴퓨터는 PATH에 등록된 경로를 순서대로 뒤져서 파이썬을 찾는다.

  2. pyenv를 설치만 하고 PATH 설정을 하지 않으면, 터미널은 여전히 시스템 파이썬을 먼저 찾아 실행한다.

  3. 즉, pyenv로 파이썬을 설치해도 실제로는 사용되지 않는 상태가 된다.

        limjaejoon@imjaejun-ui-MacBookAir ~ % python3 --version
        Python 3.9.6
    • 이전에 파이썬 13 버전을 다운 받았지만, 3.9 버전이 나오는 모습이다.
  4. 환경 변수 설정이란, PATH의 맨 앞에 pyenv 경로를 추가하는 작업이다.

  5. 이렇게 하면 python 명령어를 입력했을 때 시스템 파이썬보다 pyenv가 먼저 개입하게 된다.

  6. pyenv는 개입한 뒤, 현재 전역 또는 로컬 설정에 맞는 파이썬 버전을 골라 실행한다.

  7. 이 설정을 .zshrc에 작성하는 이유는, 터미널을 열 때마다 자동으로 적용되게 하기 위해서이다.

  8. 결국 pyenv 설치는 파이썬 버전들을 컴퓨터에 내려받는 작업이고, 환경 변수 설정은 그것을 실제로 사용할 수 있게 연결하는 작업이다.

        limjaejoon@imjaejun-ui-MacBookAir ~ % python3 --version
        Python 3.13.12

궁금한 점이 생겼다. 지금까지 다양한 프로그램을 설치했지만, 환경 변수를 직접 해줘야하는 경우가 많지 않았다.

  1. 프로그램을 설치할 때, 설치 방식에 따라 환경 변수 설정이 자동으로 되기도 하고 수동으로 해야 하기도 한다.
  2. 예를 들어, Node.js를 공식 홈페이지 인스톨러(.pkg)로 설치하면, 설치 과정에서 자동으로 /usr/local/bin에 실행 파일을 복사한다.
  3. /usr/local/bin은 macOS가 기본적으로 PATH에 포함시켜 놓은 경로이다.
  4. 그래서 별도 설정 없이도 터미널에서 node 명령어가 바로 작동하는 것이다.
  5. 반면 pyenv는 설치 후 실행 파일을 공용 경로에 두지 않고, 자기만의 독립적인 경로에 파이썬을 관리한다.
  6. 게다가 pyenv는 단순히 실행 파일을 제공하는 것이 아니라, 명령어를 가로채서 버전을 선택하는 방식으로 작동한다.
  7. 이 가로채기 구조가 작동하려면, PATH의 맨 앞에 pyenv를 명시적으로 올려줘야 한다.
  8. 정리하자면, 환경 변수 설정이 필요 없는 프로그램은 설치 시 알아서 공용 경로에 자신을 등록한다.
  9. 환경 변수 설정이 필요한 프로그램은 공용 경로를 사용하지 않거나, PATH 순서 자체가 작동 방식에 영향을 주는 경우이다.

macOS는 기본으로 PATH에 포함시키는 경로들을 어떻게 확인할까?

  1. /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
  2. 이 파일은 모든 사용자에게 공통으로 적용되며, 터미널이 시작될 때 자동으로 읽힌다.
  3. 즉, .zshrc에 아무것도 없어도 기본 PATH는 이미 설정된 상태로 터미널이 열린다.
  4. .zshrc는 그 기본 PATH 위에 추가적인 경로를 덧붙이는 역할을 한다.

참고 자료

zshrc