uv
Rust로 작성된 초고속 Python 패키지 매니저 + 프로젝트 관리 도구. Astral(Ruff를 만든 회사)이 개발했으며, pip/venv/pyenv/poetry를 하나로 대체한다.
기존 도구와의 매핑
| 기존 Python | uv | 하는 일 |
|---|---|---|
pip install | uv pip install | 패키지 설치 |
python -m venv | uv venv | 가상환경 생성 |
pyenv install 3.12 | uv python install 3.12 | Python 버전 설치 |
pip freeze | uv lock | 의존성 잠금 (lock 파일 생성) |
pip install -r requirements.txt | uv sync | lock 기반 재현 가능한 설치 |
poetry add requests | uv add requests | 의존성 추가 |
poetry init | uv 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 패키지 매니저 비교 대상