uv란 무엇인가?

heeyoung_1023·2026년 3월 11일

uv란 무엇인가?

Python 패키지 설치, 의존성 관리, 가상환경 관리까지 모두 한 번에 해결하는 초고속 패키지 관리자 (Rust로 만들어져서 속도가 매우 빠름)

구성적으로 보면,
pip + pip-tools + venv + virtualenv + poetry 일부 기능
하나로 합쳐놓은 툴이라고 생각하면 됩니다.


pip vs uv 비교

항목pipuv
목적패키지 설치패키지 설치 + 버전 고정 + 충돌 해결 + 가상환경까지 통합
속도보통 (Python 기반)⚡ 매우 빠름 (Rust 기반)
가상환경 관리별도 venv 필요내장 (uv venv)
의존성 충돌 해결기본 불가자동 충돌 탐지 및 해결
의존성 고정 파일requirements.txtuv.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 파일로
정확한 버전 + 하위 의존성까지 모두 기록


uv가 강력한 이유

기능설명
속도pip 대비 5~20배 이상 빠름
일관성가상환경 + 설치 + 버전 관리를 한 시스템
안정성uv.lock으로 실행 환경 100% 동일 재현
도커 최적화캐싱 활용 → 레이어 빌드 속도↑
보안의존성 해시 검증 기본 지원

언제 uv를 쓰는 게 좋을까?

상황추천 여부
개인 학습 / 소규모pip 유지 가능
실제 서비스 / 팀 협업uv 강력추천
Docker 기반 배포uv 매우 추천
패키지 설치 자주 / 속도 중요uv 필수

핵심 정리

키워드결론
uv란?Python 최신 패키지/환경 올인원 관리자
pip와 차이?설치속도, 안정성, 재현성, 가상환경까지 통합
하위 호환?pip와 완벽 호환 (섞어 써도 OK)
미래 전망?Poetry/Pipenv 대체할 차세대 표준으로 평가

반드시 “처음부터” uv로 만들어야만 하는 건 아니지만,
한 프로젝트/가상환경 안에서는 되도록 uv 방식으로 일관되게 관리하는 게 좋다

(즉, 새로 만들 땐 처음부터 uv로 만드는 걸 추천)

이걸 기준으로 처음부터 uv로 쓸 때 흐름 + 주의사항을 정리해볼게요.

1. 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

2. “uv로 관리한다”는 게 정확히 무슨 뜻?

한 가상환경 안에서 “주로 쓰는 패키지 관리자”를 uv로 통일하겠다는 의미예요.

  • ❌ 섞어서: pip install ..., uv add ..., pip uninstall ...
  • ✅ 통일해서: uv add ..., uv remove ..., uv pip install -r ...

이렇게 하면:

  • 의존성 상태가 예측 가능하고,
  • uv.lock 같은 잠금 파일로 환경을 재현하기 쉬움.

3. uv로 시작할 때 꼭 알아야 할 주의사항

⚠️ 주의 1: 한 가상환경에서 “주인”은 한 명만

상황결과/위험
uv add, uv remove, uv pip install로만 관리✅ 가장 안정적
pip/uv를 아무 생각 없이 섞어 사용⚠️ 버전 꼬임, 누가 설치했는지 추적 어려움

실제 예:

uv add django
pip install djangorestframework  # 여기서 pip 섞음
uv remove django
  • django는 사라졌는데
  • djangorestframework는 남아있음 → “패키지 상태”를 uv만 보고 판단하기 애매해짐

👉 권장:

“이 가상환경은 uv 관리다”라고 정했으면 설치/삭제는 uv만 사용하기.


⚠️ 주의 2: 기존 pip 방식 프로젝트를 가져올 때

이미 이런 구조였다면:

myproject/
  ├─ venv/
  ├─ requirements.txt
  └─ manage.py

이 상태에서:

  • 기존 venv를 그냥 두고 그 안에서 uv를 써도 technically 가능하지만
  • 제일 깔끔한 건:
rm -rf venv           # 옛날 venv 삭제
uv venv .venv         # 새로 생성
source .venv/bin/activate
uv pip install -r requirements.txt

이렇게 “새 가상환경 + uv 관리”로 이주하는 것.


⚠️ 주의 3: requirements.txt vs uv.lock

  • requirements.txt
    • 사람이 직접 작성 / pip freeze로 생성
    • 상위 패키지 + 하위 의존성까지 다 섞여 있음
  • uv.lock
    • uv가 계산해서 만든 “정확한 스냅샷”
    • 어느 버전이 어떤 이유로 선택됐는지 기록 + 완전 고정

실제 팁:

  • 초반에는 requirements.txt 계속 써도 됨.
  • 점점 프로젝트가 커지고 배포, CI, Docker로 가면 → uv.lock까지 함께 쓰는 구조 권장.

예:

uv pip install -r requirements.txt
# 필요하다면
uv lock  # (혹은 유사 명령으로 lock 생성)

(명령 이름은 버전에 따라 살짝 달라질 수 있지만, 개념은
“requirements → lock 파일 생성”이라고 이해하면 됨.)


==⚠️ 주의 4: VSCode / PyCharm 설정==

==uv로 venv를 만들어도,==
==IDE 입장에서는 그냥 “Python 가상환경”일 뿐이에요.==

  • ==VSCode:==
    • ==Ctrl+Shift+PPython: Select Interpreter==
    • ==.venv/bin/python 또는 .venv\\Scripts\\python.exe 선택==
  • ==PyCharm:==
    • ==Settings → Project → Python Interpreter에서 .venv 선택==

==✅ uv로 만들었다고 해서 IDE 사용법이 달라지는 건 전혀 없음==
==그냥 “누가 venv를 만들었나”의 차이일 뿐.==

==---==

==⚠️ 주의 5: Python 버전과 uv==

==uv는 uv venv 시에 “현재 시스템의 python”을 사용해 venv를 만들어요.==

==즉:==

python3 --version  # → 3.12
uv venv .venv      # → 3.12 기반 venv

==만약 여러 Python 버전이 있고==
==특정 버전으로 가상환경을 만들고 싶다면:==

  • ==먼저 원하는 Python 버전으로 쉘에서 잡고 (pyenv 등)==
  • ==그 상태에서 uv venv 실행하는 패턴 추천.==

4. 실전용 템플릿 (한 번 정해놓고 매번 복붙용)

예를 들어, 앞으로 새 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

🔄 pip → uv 방식 전환 가이드

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
profile
개발언어를 배우는 과정 기록

0개의 댓글