uv

Rust로 작성된 초고속 Python 패키지 매니저 + 프로젝트 관리 도구. Astral(Ruff를 만든 회사)이 개발했으며, pip/venv/pyenv/poetry를 하나로 대체한다.

기존 도구와의 매핑

기존 Pythonuv하는 일
pip installuv pip install패키지 설치
python -m venvuv venv가상환경 생성
pyenv install 3.12uv python install 3.12Python 버전 설치
pip freezeuv lock의존성 잠금 (lock 파일 생성)
pip install -r requirements.txtuv synclock 기반 재현 가능한 설치
poetry add requestsuv add requests의존성 추가
poetry inituv init프로젝트 초기화

주요 명령어

uv init                          # 프로젝트 초기화 (pyproject.toml 생성)
uv add <pkg>                     # 의존성 추가
uv add <pkg> --dev               # dev 의존성 추가
uv remove <pkg>                  # 의존성 제거
uv sync                          # lock 파일 기반으로 .venv 생성 + 설치
uv lock                          # uv.lock 갱신
uv run <command>                 # .venv 활성화 없이 명령 실행
uv python install 3.12           # Python 버전 설치
uv python list                   # 설치된 Python 버전 목록
uvx <pkg>                        # 일회성 실행 (pipx/npx 대응)

프로젝트 파일 구조

project/
├── pyproject.toml               # 의존성 선언 (package.json 역할)
├── uv.lock                      # 정확한 버전 잠금 (package-lock.json 역할)
└── .venv/                       # 가상환경 (node_modules 역할)

왜 빠른가

pip은 Python으로 작성되어 의존성 해석이 느리다. uv는 Rust로 작성되어 병렬 다운로드 + 최적화된 의존성 해석으로 10~100배 빠르다. Node.js 생태계에서 Bun이 npm을 대체하는 것과 같은 맥락이다.

적합한 경우

  • 새 Python 프로젝트 시작 시 (poetry/pipenv 대신)
  • CI/CD에서 빠른 의존성 설치가 필요한 경우
  • pyenv + pip + venv를 하나로 통합하고 싶은 경우

관련 문서

  • poethepoet (poe) — uv와 함께 쓰는 태스크 러너 (uv run poe <task>)
  • Bun — JavaScript 생태계의 유사한 포지션 (Rust/Zig 기반 올인원 도구)
  • npm · pnpm · Yarn — Node.js 패키지 매니저 비교 대상