C.W.K.
Stream
Lesson 04 of 05 · published

Virtual Environments, requirements.txt, Editable Installs

~11 min · pip, concepts, venv

Level 0초심자
0 XP0/55 lessons0/16 achievements
0/80 XP to next level80 XP to go0% complete

4개 개념이 pip 기반 Python 개발의 대부분 carry. 각각 깨끗이 알면 '그냥 pip install 돌리고 희망' 하는 사람이랑 너랑 구분됨.

Virtual environments (venv). 자기 Python 인터프리터 복사본과 자기 site-packages 가진 디렉토리. 활성화하면 shell PATH 조정해서 pythonpip 이 venv 안에서 resolve. 비활성화하면 PATH 복원. 각 프로젝트가 자기 venv 받음; 사이에 leak 없음. .venv 디렉토리는 gitignore 해야 (항상 재생성 가능).

requirements.txt. 패키지 listing 하는 flat 텍스트 파일, 옵션 버전 제약 가능 (requests==2.31.0, flask>=3.0). pip 이 pip install -r requirements.txt 로 읽음. 결정적으로 requirements.txt 가 진짜 lockfile 아님 — transitive dep 버전이나 콘텐츠 hash 캡처 안 함. 진짜 재현성엔 pip-tools (작은 requirements.in 에서 fully-pinned requirements.txt 생성) 또는 uvuv.lock 으로 전환 필요.

Editable installs (pip install -e .). Python 패키지 개발할 때 소스 코드 변경이 즉시 반영되길 원해 — 매 save 마다 reinstall 안 함. pip install -e . 가 패키지를 venv 의 site-packages 에 symlink 등가물로 install. 모든 Python 라이브러리가 이렇게 개발됨.

한계. 진짜 프로젝트 무는 pip 한계 셋: Python 버전 관리 없음 (multiple Python 버전 install 에 pyenv 필요); 느린 install (pip 이 직렬로 resolve + 다운; uv 가 parallel); dirty uninstall (패키지 uninstall 하면 deps 남음 — 시간 지나며 누적). pip 의 디자인이 그냥 이거 안 다룸.

Code

requirements.txt — 진짜 lockfile 아님·text
# 보통 손으로 편집한 requirements.txt
requests>=2.31.0
flask>=3.0
sqlalchemy[asyncio]>=2.0

# pip-tools 생성 (lockfile 에 더 가까운 버전)
# Generated by: pip-compile requirements.in
requests==2.31.0 \
    --hash=sha256:abcd... \
    --hash=sha256:efgh...
flask==3.0.3 \
    --hash=sha256:...
# ... 모든 transitive dep, hash 와 함께 핀
디스크의 venv 레이아웃·bash
ls .venv/
# bin/         — python, pip, install 패키지의 console scripts
# lib/         — site-packages (모든 거 install 되는 곳)
# include/     — C 헤더 (C extension 가진 패키지용)
# pyvenv.cfg   — 설정: 이 venv 가 어떤 Python 버전 사용

ls .venv/bin/
# python   python3   python3.13   pip   pip3   pip3.13   activate   ...

External links

Exercise

venv 에 pip-tools install ('pip install pip-tools'), 두 패키지로 requirements.in 만들기 ('echo "requests\nflask" > requirements.in'), 그 다음 'pip-compile requirements.in'. 생성된 requirements.txt 읽어 — 모든 transitive dep 가 이제 hash 와 함께 핀된 거 봐. 이게 진짜 lockfile.

Progress

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

댓글 0

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

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