만나게 될 세 종류의 Python
설치 시작하기 전에 *가장 쓸모 있는 한 가지 정보*. 개발 머신엔 보통 *세 가지 다른 Python* 이 공존하게 돼. 그리고 *"pip 가 패키지 못 찾음"* / *"분명 install 했는데!"* 류 사고 대부분이 이 셋을 헷갈리는 데서 와:
- System Python — OS 가 들고 있는 그것 (macOS 한 개, Linux 배포판 대부분 한 개). 손대지 마. 패키지 install 절대 X. OS 가 직접 쓰는 거라 깨면 OS 가 깨져.
- User Python — 직접 깐 것, 유저 계정 전역으로 쓸 수 있는 것. *"Python 설치"* 튜토리얼이 가르치는 게 보통 이거고, 프로젝트의 *base* 로 쓰는 그것.
- Project Python (virtualenv) — 프로젝트 디렉토리 안에 사는 *프로젝트 전용 카피*. 프로젝트 *들어갈 때* 활성화, 나갈 때 비활성화. 프로젝트들이 의존성을 공유하면 안 되니까 — 격리하는 방법.
이 quest 의 대부분은 (3) 에서 보내. 이 트랙 lesson 7 가서 virtualenv 깊이 다뤄. 지금은 *셋이 있다* 만 알아둬. 그리고 *"내 터미널이 부르고 있는 `python` 은 어떤 거지?"* 이 질문 — 평생 답하게 돼.
5 가지 설치 경로 — 골라서 출발
(2) User Python 을 깔 방법은 여러 가지. *유일한 정답* 은 없어 — 할 작업의 종류로 골라.
| 방법 | 적합한 사용자 | 주의점 |
|---|---|---|
| python.org installer | OS 무관 초보자 — 어디서나 동작, 추가로 배울 게 없음 | 업그레이드 수동. 한 번에 한 Python. |
| Homebrew (macOS) | 이미 brew 쓰는 macOS 개발자 | brew 업데이트마다 경로 이동 — `python3` resolution 헷갈릴 수 있어. |
| pyenv | 여러 Python 버전 동시에 필요한 경우 | 첫 install 시 source 컴파일 — 느려. |
| uv | 현대적 프로젝트, 빠른 빌드, cwkPippa 의 선택 | 새로운 도구 — 일부 팀이 아직 채택 X. |
| conda / miniconda | 데이터 사이언스 / 과학 Python (NumPy, pandas 등) | pip 와 세계관이 다름 — 한 env 에 conda + pip 섞으면 골치. |
이 quest 기준 — 익숙한 Python install 이 아직 없다면 uv 추천. 빠르고, 현대적이고, 버전 관리 + virtualenv 를 한 도구로, cwkPippa 가 직접 쓰는 그것. Pippa Quest 의 Backend 트랙에서 uv 더 깊게.
설치 확인
설치 끝나면 *새 터미널* 열기 (중요 — 환경 변수가 새 셸에서 refresh 돼). 세 명령어로 다 확인 가능.
which python 이 /usr/bin/python 같은 시스템 경로 가리키면 — 시스템 Python 부르고 있어. 직접 깐 install 위치 가리키면 (Homebrew → /opt/homebrew/bin/python3; pyenv → ~/.pyenv/shims/python; uv → ~/.local/share/uv/python/...) — OK.
첫 REPL 세션
REPL — Read, Eval, Print, Loop — 은 Python 의 *대화형 프롬프트*. 코드 입력, 결과 즉시, 또 입력. 인자 없이 python 만 치면 이런 게 떠 — Python 3.13.x (main, ...) [...] on darwin, 그 아래 >>>. 그 >>> 가 *입력 기다리는 중* 표시.
여기서 lesson 1 의 세 코드 블록 한 줄씩 직접 입력해봐. Python 이 각 statement 즉시 실행하고 expression 의 결과 보여주는 걸 볼 수 있어. print(type(x)) 가 *진짜 클래스* 를 보여주지 — 우리가 *"타입은 값에 있다"* 고 한 게 거짓말이 아니야.
Python 은 어디에 있나?
install 후 Python 이 *어디 살고 있는지* 알아두면 유용한 세 가지:
sys.executable— *지금 돌고 있는* Python 인터프리터 바이너리의 절대 경로.sys.version— 빌드 정보 포함한 전체 버전 문자열.sys.path— Python 이 모듈 찾을 때 뒤지는 디렉토리 list.import foo하면 여기를 *순서대로* 봐.
이게 보이는 것보다 중요해. *"패키지 X install 했는데 Python 이 못 찾음"* 사고는 거의 항상 — *어떤 Python 으로 pip 돌렸나* vs *어떤 Python 이 지금 스크립트 실행하나* 의 mismatch. sys.executable 이 *지금 대화하고 있는 Python* 이 어떤 건지 알려줘.
python vs python3 의 분열
Python 2 는 2020 년에 공식적으로 은퇴했는데, 그 유령이 아직 터미널 명령어에 남아있어. 일부 시스템에선 python 이 여전히 Python 2 (또는 아무 것도 아님) 가리키고, python3 이 현대 인터프리터. 다른 시스템에선 둘 다 Python 3 가리키거나, python 만 존재.
python 과 python3 가 *다른 바이너리일 수 있다* 고 가정. 모호할 가능성 있으면 python3 명시. uv 와 pyenv 는 이걸 정규화해줘. 시스템 Python 은 거의 안 해줘.
Windows 특수 사항
Windows 만의 특이점 — Python Launcher for Windows (py 명령어). python.org installer 와 함께 와서 버전 전환을 쉽게 해줘 — py -3.13 으로 3.13, py -3.11 로 3.11. 대부분 Windows 튜토리얼이 python 대신 py 써.
대안 — WSL (Windows Subsystem for Linux). Windows 안에 진짜 Linux 환경을 두고, Python 이 macOS/Linux 와 *완전히 똑같이* 동작. Windows 에서 본격 개발 할 거면 WSL 한 번 셋업해둘 가치 있어.
요약
위 방법 중 하나로 install, 새 터미널, python --version 으로 Python 3.12 이상 확인. 그 다음 REPL 띄우고 lesson 1 의 세 코드 블록 *진짜로* 다시 입력해봐.
which python, sys.executable, python --version. 추측 금지. 가정 금지. *돌리고 있다고 생각하는 Python* 과 *실제 돌고 있는 Python* 이 가끔 다른데 — 추측 대신 시스템한테 직접 물어보는 게 Python 다운 움직임.