Python 패키지 설치, 의존성 관리, 가상환경 관리까지 모두 한 번에 해결하는 초고속 패키지 관리자 (Rust로 만들어져서 속도가 매우 빠름)
구성적으로 보면,
pip + pip-tools + venv + virtualenv + poetry 일부 기능을
하나로 합쳐놓은 툴이라고 생각하면 됩니다.
| 항목 | pip | uv |
|---|---|---|
| 목적 | 패키지 설치 | 패키지 설치 + 버전 고정 + 충돌 해결 + 가상환경까지 통합 |
| 속도 | 보통 (Python 기반) | ⚡ 매우 빠름 (Rust 기반) |
| 가상환경 관리 | 별도 venv 필요 | 내장 (uv venv) |
| 의존성 충돌 해결 | 기본 불가 | 자동 충돌 탐지 및 해결 |
| 의존성 고정 파일 | requirements.txt만 | uv.lock (정확한 동결) |
| 설치 재현성 | 낮음 | 매우 높음 |
| 캐싱 | 제한적 | 강력한 글로벌 캐시 |
| 로컬/CI/CD/Docker | 설정 필요 | 거의 자동 최적화 |
| UI | 단순 | 직관적 & 개발 편의 기능 포함 |
pip 방식
python -m venv venv
source venv/bin/activate
pip install django==5.1
pip install djangorestframework==3.15
pip freeze > requirements.txt
uv 방식
uv venv .venv
source .venv/bin/activate
uv add django djangorestframework
→ 이 과정에서 uv.lock 파일로
정확한 버전 + 하위 의존성까지 모두 기록
| 기능 | 설명 |
|---|---|
| 속도 | pip 대비 5~20배 이상 빠름 |
| 일관성 | 가상환경 + 설치 + 버전 관리를 한 시스템 |
| 안정성 | uv.lock으로 실행 환경 100% 동일 재현 |
| 도커 최적화 | 캐싱 활용 → 레이어 빌드 속도↑ |
| 보안 | 의존성 해시 검증 기본 지원 |
| 상황 | 추천 여부 |
|---|---|
| 개인 학습 / 소규모 | pip 유지 가능 |
| 실제 서비스 / 팀 협업 | uv 강력추천 |
| Docker 기반 배포 | uv 매우 추천 |
| 패키지 설치 자주 / 속도 중요 | uv 필수 |
| 키워드 | 결론 |
|---|---|
| uv란? | Python 최신 패키지/환경 올인원 관리자 |
| pip와 차이? | 설치속도, 안정성, 재현성, 가상환경까지 통합 |
| 하위 호환? | pip와 완벽 호환 (섞어 써도 OK) |
| 미래 전망? | Poetry/Pipenv 대체할 차세대 표준으로 평가 |
반드시 “처음부터” uv로 만들어야만 하는 건 아니지만,
한 프로젝트/가상환경 안에서는 되도록 uv 방식으로 일관되게 관리하는 게 좋다
(즉, 새로 만들 땐 처음부터 uv로 만드는 걸 추천)
이걸 기준으로 처음부터 uv로 쓸 때 흐름 + 주의사항을 정리해볼게요.
1️⃣ 가상환경 생성
# 프로젝트 루트에서
uv venv .venv
.venv 폴더 안에 가상환경 생성 (기존 python -m venv .venv와 비슷).venv, venv 아무거나 상관없음 (보통 .venv 많이 씀)2️⃣ 가상환경 활성화
# macOS / Linux
source .venv/bin/activate
# Windows (PowerShell)
.\\.venv\\Scripts\\Activate.ps1
✅ 중요: 활성화는 uv가 아니라 “쉘 기능”이에요.
즉, venv로 만들든 uv venv로 만들든 활성화 방법은 똑같음.
3️⃣ ==패키지 설치는 pip 대신 uv로==
# Django 설치 예시
uv add django
# 추가 패키지
uv add djangorestframework
uv add mysqlclient
또는 기존처럼 requirements.txt 기반이라면:
uv pip install -r requirements.txt
한 가상환경 안에서 “주로 쓰는 패키지 관리자”를 uv로 통일하겠다는 의미예요.
pip install ..., uv add ..., pip uninstall ...uv add ..., uv remove ..., uv pip install -r ...이렇게 하면:
uv.lock 같은 잠금 파일로 환경을 재현하기 쉬움.| 상황 | 결과/위험 |
|---|---|
uv add, uv remove, uv pip install로만 관리 | ✅ 가장 안정적 |
| pip/uv를 아무 생각 없이 섞어 사용 | ⚠️ 버전 꼬임, 누가 설치했는지 추적 어려움 |
실제 예:
uv add django
pip install djangorestframework # 여기서 pip 섞음
uv remove django
👉 권장:
“이 가상환경은 uv 관리다”라고 정했으면 설치/삭제는 uv만 사용하기.
이미 이런 구조였다면:
myproject/
├─ venv/
├─ requirements.txt
└─ manage.py
이 상태에서:
rm -rf venv # 옛날 venv 삭제
uv venv .venv # 새로 생성
source .venv/bin/activate
uv pip install -r requirements.txt
이렇게 “새 가상환경 + uv 관리”로 이주하는 것.
requirements.txtpip freeze로 생성uv.lock실제 팁:
requirements.txt 계속 써도 됨.uv.lock까지 함께 쓰는 구조 권장.예:
uv pip install -r requirements.txt
# 필요하다면
uv lock # (혹은 유사 명령으로 lock 생성)
(명령 이름은 버전에 따라 살짝 달라질 수 있지만, 개념은
“requirements → lock 파일 생성”이라고 이해하면 됨.)
==uv로 venv를 만들어도,==
==IDE 입장에서는 그냥 “Python 가상환경”일 뿐이에요.==
Ctrl+Shift+P → Python: Select Interpreter==.venv/bin/python 또는 .venv\\Scripts\\python.exe 선택==.venv 선택====✅ uv로 만들었다고 해서 IDE 사용법이 달라지는 건 전혀 없음==
==그냥 “누가 venv를 만들었나”의 차이일 뿐.==
==---==
==uv는 uv venv 시에 “현재 시스템의 python”을 사용해 venv를 만들어요.==
==즉:==
python3 --version # → 3.12
uv venv .venv # → 3.12 기반 venv
==만약 여러 Python 버전이 있고==
==특정 버전으로 가상환경을 만들고 싶다면:==
pyenv 등)==uv venv 실행하는 패턴 추천.==예를 들어, 앞으로 새 Django 프로젝트 할 때 매번 이렇게 시작해도 좋아요:
# 1. 가상환경 생성
uv venv .venv
# 2. 활성화
source .venv/bin/activate # Windows는 .\\.venv\\Scripts\\Activate.ps1
# 3. 기본 패키지 설치
uv add django djangorestframework python-dotenv
# 4. 현재 목록 확인
uv pip list
1️⃣ 기존 가상환경 제거
deactivate # 실행 중이라면
rm -rf venv # 또는 .venv
2️⃣ uv 설치
(만약 전역으로 설치되어 있지 않다면)
pip install uv
3️⃣ uv 기반 새 가상환경 생성 + 활성화
uv venv .venv
source .venv/bin/activate
4️⃣ 기존 패키지 다시 설치 (requirements.txt 기반)
uv pip install -r requirements.txt
또는 더 권장 방식👇
requirements.txt를 유지하면서도 uv 방식으로 관리 전환
uv add $(cat requirements.txt)
5️⃣ uv.lock 생성하기 (옵션이지만 강력 추천)
uv pip compile requirements.txt -o uv.lock
→ 패키지 버전을 고정하여 실행 환경 재현성이 보장됩니다.
6️⃣ 확인
uv pip list