danbibibi
article thumbnail

개요

UV는 Rust로 작성된 차세대 Python 패키지 관리자로, 기존 pip의 성능 한계를 극복하고 현대적인 개발 워크플로우를 지원합니다.

Astral에서 개발한 이 도구는 단순한 pip 대체재를 넘어 Python 프로젝트 관리의 전체적인 경험을 혁신하고 있습니다.

왜 UV인가?

성능의 혁신

  • 10-100배 빠른 속도: Rust 기반 구현으로 패키지 설치 속도가 극적으로 향상
  • 병렬 다운로드: 여러 패키지를 동시에 다운로드하여 시간 단축
  • 효율적인 캐싱: 글로벌 캐시로 중복 다운로드 방지

현대적인 기능

  • 의존성 해결 개선: 더 정확하고 빠른 의존성 충돌 해결
  • lockfile 지원: 재현 가능한 빌드를 위한 uv.lock 파일
  • Python 버전 관리: pyenv 없이도 Python 버전 설치 및 관리

설치 및 기본 사용법

설치

# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

# pip로 설치
pip install uv

기본 명령어

# 패키지 설치 (pip install 대체)
uv pip install requests

# requirements.txt에서 설치
uv pip install -r requirements.txt

# 가상환경 생성 및 활성화
uv venv
source .venv/bin/activate  # Linux/macOS
.venv\Scripts\activate     # Windows

# 프로젝트 초기화
uv init my-project
cd my-project

주요 기능 상세

1. 프로젝트 관리

# 새 프로젝트 생성
uv init --name my-app --package

# 의존성 추가
uv add requests pandas

# 개발 의존성 추가
uv add --dev pytest black

# 의존성 제거
uv remove requests

2. Python 버전 관리

# 사용 가능한 Python 버전 확인
uv python list

# 특정 Python 버전 설치
uv python install 3.12

# 프로젝트에 Python 버전 지정
uv python pin 3.12

3. 스크립트 실행

# 일회성 스크립트 실행 (의존성 자동 설치)
uv run --with requests script.py

# 인라인 의존성으로 스크립트 실행
uv run --with "requests>=2.28" python -c "import requests; print(requests.__version__)"

실제 사용 시나리오

기존 프로젝트 마이그레이션

# 기존 requirements.txt가 있는 프로젝트
uv venv
uv pip install -r requirements.txt

# pip-tools 스타일 워크플로우
uv pip compile requirements.in
uv pip sync requirements.txt

새 프로젝트 시작

# 완전한 프로젝트 설정
uv init my-web-app
cd my-web-app
uv add fastapi uvicorn
uv add --dev pytest black isort
uv run python main.py

CI/CD 최적화

# GitHub Actions 예시
- name: Install dependencies
  run: |
    curl -LsSf https://astral.sh/uv/install.sh | sh
    uv pip install -r requirements.txt

성능 비교

벤치마크 결과

작업 pip uv 개선율
Django 설치 45초 1.5초 30배
NumPy 설치 12초 0.8초 15배
requirements.txt (50개 패키지) 2분 8초 15배

메모리 사용량

  • pip: 평균 200MB
  • uv: 평균 50MB (75% 절약)

고급 기능

1. Workspace 관리

# pyproject.toml
[tool.uv.workspace]
members = ["packages/*"]

[tool.uv.sources]
my-local-package = { path = "packages/my-package" }

2. 커스텀 인덱스

# 사내 PyPI 서버 사용
uv pip install --index-url https://pypi.company.com/simple/ my-package

# 추가 인덱스 지정
uv pip install --extra-index-url https://test.pypi.org/simple/ test-package

3. 환경 변수 설정

# 글로벌 설정
export UV_INDEX_URL="https://pypi.company.com/simple/"
export UV_CACHE_DIR="/custom/cache/path"

# 프로젝트별 설정
echo "index-url = 'https://pypi.company.com/simple/'" > .uv.toml

기존 도구와의 호환성

pip 명령어 매핑

# pip → uv 변환
pip install package     → uv pip install package
pip freeze             → uv pip freeze
pip list               → uv pip list
pip uninstall package  → uv pip uninstall package

Poetry/PDM 사용자를 위한 팁

# Poetry 스타일 의존성 관리
uv add requests  # poetry add requests와 동일
uv remove requests  # poetry remove requests와 동일

# PDM 스타일 스크립트 실행
uv run python script.py  # pdm run python script.py와 유사

실무 적용 가이드

1. 팀 도입 전략

# 1단계: 개발자 개별 테스트
uv venv test-env
uv pip install -r requirements.txt

# 2단계: CI/CD 파이프라인 적용
# 기존 pip 명령어를 uv pip로 점진적 교체

# 3단계: 프로젝트 표준화
uv init --package
uv add --dev pre-commit black pytest

2. 성능 모니터링

# 설치 시간 측정
time uv pip install -r requirements.txt

# 캐시 상태 확인
uv cache info
uv cache clean  # 캐시 정리

3. 문제 해결

# 상세 로그 출력
uv pip install package -v

# 의존성 충돌 해결
uv pip install package --resolution=highest

# 강제 재설치
uv pip install package --force-reinstall

한계점과 고려사항

현재 제한사항

  • 생태계 성숙도: 상대적으로 새로운 도구로 일부 엣지 케이스 존재
  • Windows 지원: Linux/macOS 대비 상대적으로 제한적
  • 레거시 패키지: 일부 오래된 패키지에서 호환성 이슈 가능

마이그레이션 시 주의점

  • 기존 가상환경과의 충돌 가능성
  • CI/CD 파이프라인 수정 필요
  • 팀원들의 학습 곡선

미래 전망

로드맵

  • 더 나은 의존성 해결: 복잡한 의존성 그래프 처리 개선
  • IDE 통합: VS Code, PyCharm 등과의 네이티브 통합
  • 엔터프라이즈 기능: 보안, 감사, 정책 관리 기능 강화

커뮤니티 성장

  • GitHub 스타 수 급속 증가 (20k+)
  • 주요 Python 프로젝트들의 도입 확산
  • 활발한 개발 및 버그 수정

결론

UV는 단순한 pip 대체재를 넘어 Python 개발 경험을 전반적으로 개선하는 도구입니다. 특히 대규모 프로젝트나 CI/CD 파이프라인에서 그 진가를 발휘하며, 개발 생산성을 크게 향상시킬 수 있습니다.

현재 프로젝트에서 패키지 설치 속도나 의존성 관리에 어려움을 겪고 있다면, UV 도입을 진지하게 고려해볼 만합니다. 점진적 도입을 통해 리스크를 최소화하면서도 성능 향상의 이점을 누릴 수 있을 것입니다.

 

 

GitHub - astral-sh/uv: An extremely fast Python package and project manager, written in Rust.

An extremely fast Python package and project manager, written in Rust. - astral-sh/uv

github.com

 

uv

An extremely fast Python package and project manager, written in Rust. Installing Trio's dependencies with a warm cache. 🚀 A single tool to replace pip, pip-tools, pipx, poetry, pyenv, twine, virtualenv, and more. ⚡️ 10-100x faster than pip. 🗂️

docs.astral.sh

 

PIP를 대체하는 UV 사용법 가이드

 

devocean.sk.com

 

profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로