프로젝트마다 가상환경을 쓰면 설치한 패키지와 버전이 다른 프로젝트 및 시스템 Python과 섞이지 않는다.

python -m venv .venv
source .venv/bin/activate
python -m pip install package-name

Windows의 활성화 명령은 다르지만, `python -m pip`처럼 현재 인터프리터의 pip를 지정하는 습관은 같다. `.venv`는 Git에 넣지 않는다.

직접 사용하는 패키지는 프로젝트 메타데이터에 선언하고, 그 패키지가 끌고 오는 간접 의존성은 잠금 도구가 기록하게 한다. 라이브러리는 사용자 환경과 공존해야 하므로 지나치게 정확한 하위 버전 고정보다 호환 범위를 신중히 정한다.

설치 문제를 해결할 때 `which python`, `python -c "import sys; print(sys.executable)"`, `python -m pip --version`으로 같은 환경을 보고 있는지 먼저 확인한다.

Python 21. 가상환경과 의존성의 핵심 흐름도
그림. 가상환경과 잠금 파일이 프로젝트별 설치 결과를 재현한다.