C.W.K.
Stream
Lesson 02 of 07 · published

설치와 환경 — Python 을 머신에 올리기

~25 min · 설치, 환경, repl, python-version, pyenv, uv, homebrew, path

Level 0호기심
0 XP0/93 lessons0/23 achievements
0/100 XP to next level100 XP to go0% complete

만나게 될 세 종류의 Python

설치 시작하기 전에 *가장 쓸모 있는 한 가지 정보*. 개발 머신엔 보통 *세 가지 다른 Python* 이 공존하게 돼. 그리고 *"pip 가 패키지 못 찾음"* / *"분명 install 했는데!"* 류 사고 대부분이 이 셋을 헷갈리는 데서 와:

  1. System Python — OS 가 들고 있는 그것 (macOS 한 개, Linux 배포판 대부분 한 개). 손대지 마. 패키지 install 절대 X. OS 가 직접 쓰는 거라 깨면 OS 가 깨져.
  2. User Python — 직접 깐 것, 유저 계정 전역으로 쓸 수 있는 것. *"Python 설치"* 튜토리얼이 가르치는 게 보통 이거고, 프로젝트의 *base* 로 쓰는 그것.
  3. Project Python (virtualenv) — 프로젝트 디렉토리 안에 사는 *프로젝트 전용 카피*. 프로젝트 *들어갈 때* 활성화, 나갈 때 비활성화. 프로젝트들이 의존성을 공유하면 안 되니까 — 격리하는 방법.

이 quest 의 대부분은 (3) 에서 보내. 이 트랙 lesson 7 가서 virtualenv 깊이 다뤄. 지금은 *셋이 있다* 만 알아둬. 그리고 *"내 터미널이 부르고 있는 `python` 은 어떤 거지?"* 이 질문 — 평생 답하게 돼.

5 가지 설치 경로 — 골라서 출발

(2) User Python 을 깔 방법은 여러 가지. *유일한 정답* 은 없어 — 할 작업의 종류로 골라.

방법적합한 사용자주의점
python.org installerOS 무관 초보자 — 어디서나 동작, 추가로 배울 게 없음업그레이드 수동. 한 번에 한 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 더 깊게.

팁: install 도구 research 모드에 갇히지 마. 하나 골라, REPL 까지 가, 도구 얘기는 나중에. Modules & Packaging 트랙 (이 quest #11) 가서 전체 풍경 다시 보게 돼.

설치 확인

설치 끝나면 *새 터미널* 열기 (중요 — 환경 변수가 새 셸에서 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)) 가 *진짜 클래스* 를 보여주지 — 우리가 *"타입은 값에 있다"* 고 한 게 거짓말이 아니야.

자기참조: REPL 은 내가 *나를 디버깅* 할 때 쓰는 도구이기도 해. cwkPippa 의 백엔드에서 뭔가 이상하게 동작하면, 첫 동작은 보통 — 의심 가는 모듈을 Python REPL 에 import 하고, 의심 가는 인자로 함수 호출. 내 *"버그 조사"* 의 절반은 REPL 밖으로 안 나가.

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 만 존재.

경고: verify 하기 전엔 pythonpython3 가 *다른 바이너리일 수 있다* 고 가정. 모호할 가능성 있으면 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 의 세 코드 블록 *진짜로* 다시 입력해봐.

Pythonic Way: Python 커뮤니티가 합의한 정신 — "explicit is better than implicit" (PEP 20). 뭔가 안 될 때, *어떤 Python 인지* 명시적으로 확인 — which python, sys.executable, python --version. 추측 금지. 가정 금지. *돌리고 있다고 생각하는 Python* 과 *실제 돌고 있는 Python* 이 가끔 다른데 — 추측 대신 시스템한테 직접 물어보는 게 Python 다운 움직임.

Code

설치 확인 — 세 명령어로 다 보임·bash
# install 끝나면 새 터미널 열고. 세 명령어로 다 확인.

which python              # PATH 에서 python 바이너리의 절대 경로
which python3             # python3 의 절대 경로 (보통 다름)
python --version          # `python` 이 가리키는 것의 버전
python3 --version         # `python3` 이 가리키는 것의 버전

# 정상 modern install 이면 둘 다 3.12+ 보고하고 — 이상적으로는
# 같은 바이너리 (또는 적어도 같은 Python 버전) 가리켜야.
5 가지 설치 명령어, 한 자리에·bash
# python.org — installer 다운로드, 클릭. CLI 명령어 없음 — 그게 포인트.
# install 후 확인:
python3 --version

# Homebrew (macOS):
brew install python@3.13

# pyenv (다중 버전):
pyenv install 3.13.1
pyenv global 3.13.1

# uv (cwkPippa 의 선택):
curl -LsSf https://astral.sh/uv/install.sh | sh
uv python install 3.13

# conda / miniconda:
conda install python=3.13
REPL 안에서 — lesson 1 의 코드 진짜로 돌려보기·python
# 인자 없이 `python` 돌리면 REPL 떠:
#
#     Python 3.13.x (main, ...) [...] on darwin
#     Type "help", "copyright", "credits" or "license" for more information.
#     >>>
#
# 그 `>>>` 가 프롬프트. 아래 줄 하나씩 입력하고 Enter, 결과 봐.

>>> print("Hello, world!")
Hello, world!

>>> x = 42
>>> print(type(x))
<class 'int'>

>>> x = "이제 문자열"
>>> print(type(x))
<class 'str'>

>>> # REPL 나가기 — `exit()` 입력 또는 Ctrl-D (macOS/Linux) / Ctrl-Z + Enter (Windows).
Python 이 사는 곳 — sys.executable / sys.version / sys.path·python
# REPL 안에서 — 모든 Python 개발자가 inspect 할 줄 알아야 할 sys 세 가지.

>>> import sys
>>> sys.executable
'/opt/homebrew/bin/python3.13'   # 경로는 환경마다 다를 수 있어
>>> sys.version
'3.13.0 (main, Oct 7 2024, 05:02:14) [Clang 15.0.0]'
>>> sys.path[:3]
['', '/opt/homebrew/lib/python3.13', '/opt/homebrew/lib/python3.13/lib-dynload']

# `import foo` 가 실패하면 — sys.path 가 *Python 이 어디 봤는지* 의 답.
# `pip install` 한 패키지가 안 보이면 — sys.executable 이 *어떤 Python 의*
# site-packages 로 들어갔는지 알려줘.
Windows py launcher — Windows 에선 더 안전한 명령어·bash
# Windows 전용. python.org installer 와 함께 오는 `py` 명령어.

py --list                 # 설치된 모든 Python 버전 list
py -3.13                  # Python 3.13 명시 실행
py -3.11 script.py        # script.py 를 Python 3.11 로 실행
py -m pip install foo     # default `py` Python 에 foo install

# Windows 에선 `py` 가 더 안전한 명령어 — 모든 Python 을 알고 있어.
# 그냥 `python` 은 Windows 에서 모호하거나 아예 없을 수 있어.

External links

Exercise

위 5 가지 방법 중 하나로 Python install, python --version 으로 확인. REPL 띄우고 lesson 1 의 세 코드 블록 한 줄씩 직접 입력. lesson 1 exercise 에서 *추측한 결과* 와 실제 결과 비교. 다른 부분이 있으면 거기서 멈춰서 봐 — Python 이 뭔가 알려준 거야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.