python uv - 파이썬 패키지 관리의 트렌드

Python 생태계는 오랫동안 다양한 패키지 관리 도구들을 사용해왔다. 대표적인 것이 바로 pip인데, 요즘 Rust로 구현된 uv라는 새로운 도구가 빠르게 유행이라고 해서 게시글을 작성하게 되었다.

이 글에서는 Python의 패키지 관리자인 uv를 소개하고, 기존 도구와의 차이점 및 사용법을 알아보겠다.

uv란 무엇인가?

uv는 Astral에서 개발한 차세대 Python 프로젝트 관리 도구로, 기존 pip, virtualenv, poetry 등을 대체하면서, 빠르고 단순하게 사용할 수 있도록 설계되었다. Rust 기반 구현 덕에, 메모리 safe하며, 최적화된 성능이 특징이다.

  1. 통합 인터페이스: 가상환경 관리(venv), 의존성 해결(pip), Python 버전 관리(pyenv) 등을 단일 도구로 통합
  2. 크로스 플랫폼: .uv.lock 파일을 통해 모든 개발자가 동일한 의존성 환경을 유지할 수 있다. 즉 운영체제 및 플랫폼 독립적이다.
  3. 최적화된 성능: Rust의 컴파일러 최적화와 스레드 세이프 캐시 관리로 기존 도구 대비 10-100배 빠른 처리 속도. 사용해보면 놀랍도록 빠르다.

기존 툴들과 기능 비교 분석

기능 uv pip + venv poetry pipenv
Python 버전 관리 O (내장) X (pyenv 필요) O O
의존성 해결 O (고속) ✓ (느림) O O
빌드 시스템 O (간편) X O O
플랫폼 잠금 파일 O (.uv.lock) X O (poetry.lock) O (Pipfile.lock)
설치 속도 10-100배 빠름 표준 느림 느림
가상환경 생성 1초 이내 3-5초 5-10초 5-10초

uv 설치 방법

# 쉘 스크립트를 통한 설치
curl -Ls https://astral.sh/uv/install.sh | bash

# brew 사용 시
brew install astral-sh/uv/uv

# 윈도우 사용시
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

설치 확인

uv --version

uv 프로젝트 구조

├── 프로젝트 루트
│   ├── .venv (가상환경)
│   ├── pyproject.toml (의존성 정의)
│   └── .uv.lock (플랫폼 독립적 잠금 파일)
└── 캐시 디렉토리 (전역/프로젝트별 최적화 버전)

전역 캐시와 프로젝트별 캐시를 분리하여 의존성 해결 시 중복 다운로드를 최소화하는 구조 사용

uv 사용법

가상환경 생성

uv venv
source .venv/bin/activate

#파이썬 버전선택
uv venv -p 3.11

패키지 설치

uv pip install requests

requirements.txt 생성

uv pip compile

기존 requirements 설치

uv pip install -r requirements.txt

캐시 관리

uv cache clean

언제 uv를 써야 할까?

uv가 특히 적합한 경우는 다음과 같다.

  • 빠른 개발환경 구축이 필요한 경우
  • CI/CD 파이프라인 속도 개선이 중요한 경우
  • 기존 pip 환경을 개선하고 싶은 경우