본문 바로가기
C.W.K.
Stream
Lesson 04 of 05 · published

Virtual environment, requirements.txt, editable install

~11 min · pip, concepts, venv

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

다음 개념을 정확히 알면 pip 명령을 실행하고 결과를 바라는 수준에서 벗어나 환경을 스스로 설명하고 고칠 수 있어.

Virtual environment(venv). 자체 Python 인터프리터와 site-packages를 가진 디렉터리야. 활성화하면 셸의 PATH가 바뀌어 pythonpip이 venv 안의 실행 파일로 연결되고, 비활성화하면 원래 PATH로 돌아가. 프로젝트마다 환경을 따로 두므로 서로 의존성이 새지 않아. 언제든 다시 만들 수 있는 .venv 디렉터리는 gitignore에 넣어야 해.

requirements.txt. requests==2.31.0이나 flask>=3.0처럼 패키지와 선택적 버전 제약을 적는 평평한 텍스트 파일이야. pip은 pip install -r requirements.txt로 읽어. 중요한 점은 requirements.txt가 진짜 lockfile이 아니라는 것이야. 전이 의존성의 버전과 콘텐츠 해시를 모두 기록한다고 보장하지 않아. 제대로 재현하려면 작은 requirements.in에서 모든 버전을 고정한 파일을 만드는 pip-toolsuvuv.lock을 써야 해.

Editable install(pip install -e .). Python 패키지를 개발할 때는 저장할 때마다 다시 설치하지 않고 소스 변경을 곧바로 반영해야 해. 이 명령은 패키지를 복사하는 대신 venv의 site-packages에서 원본 소스를 가리키게 해. Python 라이브러리 개발의 표준 방식이야.

한계. pip은 여러 Python 버전을 직접 관리하지 않으므로 pyenv 같은 도구가 필요하고, 의존성을 순차적으로 해석하고 내려받아 uv보다 설치가 느려. 패키지를 제거해도 더 이상 쓰이지 않는 의존성이 남아 시간이 갈수록 쌓이기도 해. 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를 설치하고('pip install pip-tools') 두 패키지가 담긴 requirements.in을 만들어('echo "requests\nflask" > requirements.in'). 이어서 'pip-compile requirements.in'을 실행해. 생성된 requirements.txt에서 모든 전이 의존성이 해시와 함께 고정된 것을 확인해. 이것이 진짜 lockfile에 가까운 결과야.

Progress

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

댓글 0

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

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