Skip to content

Uv

(C로 구현된 비동기 라이브러리는 libuv 참고)

러스트로 구현한 초고속 파이썬 패키징 도구

Features

  • uv 패키지 매니저와 PEP 723을 통해 의존성 문제 없이 Python 스크립트 실행이 가능해짐
  • uvx 기능은 Disposable 가상환경을 자동 생성하여 환경 설정의 불편함을 해결함
  • PEP 723 메타데이터를 Python 파일에 포함하면 스크립트 자동 실행 및 패키지 관리가 편리해짐
  • 실행 스크립트 예시로 YouTube 자막 추출 프로그램을 빠르게 구현 및 배포할 수 있음
  • 이를 통해 이제 Python도 간결한 단일 실행 파일 작성이 가능해져 스크립트 활용성이 크게 향상됨

Install

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

Usage

# 프로젝트 초기화 / Project initialization
uv init my-project
uv init  # 현재 디렉토리에서 초기화

# 가상 환경 생성 / Create virtual environment
uv venv
uv venv --python 3.12

# 패키지 추가/제거 / Add/remove packages
uv add requests
uv add flask django
uv remove requests

# 의존성 동기화 / Sync dependencies
uv sync
uv sync --frozen  # lockfile 기준으로만 설치

# 프로젝트 실행 / Run project
uv run python script.py
uv run pytest
uv run --with additional-package python main.py

# 도구 실행 / Run tools
uvx ruff check .
uvx black .
uv tool run cowsay "Hello"
uv tool install ruff

# 잠금 파일 업데이트 / Update lockfile
uv lock
uv lock --upgrade

# Python 버전 관리 / Python version management
uv python install 3.12
uv python list

Uv의 킬러 기능은 즉석(ad-hoc) 환경을 쉽게 만드는 것

성능이나 Python과의 호환성은 uv의 차별점이 아님. uv는 PEPs를 준수하며, Python의 패키지 관리자로서 추천할 만함. 그러나 가장 놀라운 기능은 따로 있음.

  • Python 3.12에서 ad-hoc 스크립팅을 할 때, 종종 Pandas와 같은 의존성을 추가해야 할 때가 있음. 일반적인 방법은 다음과 같음:
    • pip install pandas를 실행하여 전역 환경을 수정하거나
    • 가상 환경을 생성하고, pip install pandas를 실행하고, 가상 환경을 활성화한 후 Python을 실행하는 것임.
  • 다른 Python 버전이 필요할 경우, pyenv를 사용하여 버전을 설치하고 로컬로 설정해야 함. 최악의 경우:
    1. pyenv install 3.12
    2. pyenv local 3.12
    3. python -m venv .venv
    4. source .venv/bin/activate
    5. pip install pandas
    6. python
  • uv를 사용하면 단 한 줄의 명령어로 가능함:
    • uv run --python 3.12 --with pandas python
    • 기억하기 쉽고, 흔적이 남지 않음. 즐거운 스크립팅!

Hacker News 의견

  • Uv's killer feature is making ad-hoc environments easy | Hacker News
  • uv 패키지 관리자를 매우 좋아하며, 커뮤니티의 표준으로 자리 잡았으면 좋겠다는 의견이 있음. 특히 새로운 사용자들에게 추천할 만한 도구임
  • uv는 PEP 723의 인라인 스크립트 종속성을 지원하여 더욱 깔끔한 사용이 가능함
  • NodeJS 개발자로서 Python의 환경 설정 문제 해결이 아직도 안 된 것이 놀라움. Node도 완벽하지 않지만, 전역 환경 수정에 대한 걱정은 없음
  • virtualenv의 활성화가 불필요하며, pyenv 인터프리터 설정 없이도 직접 가상 환경을 생성할 수 있음
  • uv의 단일 도구 실행에 여러 기능이 묶이는 것이 불편하다는 의견이 있음. venv를 활성화하고 여러 번 프로그램을 실행할 수 있는 것이 편리함
  • uv는 uvx 명령어를 포함하여 Python 스크립트를 수동 설치 없이 실행할 수 있음
    • 예: uvx --from 'huggingface_hub[cli]' huggingface-cli
  • uv를 좋아하고 곧 사용해보고 싶지만, 기사 내용의 요점을 이해하지 못하겠다는 의견이 있음. pyenv와 poetry로도 로컬 종속성을 가져올 수 있음
  • 다른 바이너리 종속성이 있는 경우 Nix와 virtualenv + pip-tools를 사용하는 것이 더 나은 선택일 수 있음
  • "올바른 경로"에서 가상 환경을 먼저 활성화한 후 pandas를 설치해야 한다는 의견이 있음

See also

  • Rust
  • ruff - 러스트로 구현한 빠른 파이썬 린트
  • Uv - 러스트로 구현한 초고속 파이썬 패키징 도구
  • PubGrub

Favorite site

Articles

  • uv와 PEP 723으로 Python 스크립트 활용하기 | GeekNews
  • Dockerized Flask / Django 앱에서 pip 대신 Uv로 전환하기 | GeekNews
    • [원문] Switching pip to uv in a Dockerized Flask / Django App — Nick Janetakis
    • uv로 전환 시 Python 디펜던시 설치 속도가 pip 대비 약 10배 빨라지고, 별도의 venv 없이 비루트(non-root) 사용자로도 실행 가능함
    • pyproject.toml 기반으로 상위 의존성만 명시하면 uv가 자동으로 lock 파일을 관리하며, 의존성 트리와 정확한 버전 관리가 pip freeze보다 우수함
    • Dockerfile에서는 uv 및 uvx 바이너리 복사, pyproject.toml/uv.lock 파일 사용, 환경 변수 설정 등 단계별 변경이 필요
    • uv sync/add/remove, uv:outdated와 같은 명령어로 쉽게 의존성 추가·삭제·업데이트 및 패키지 최신 버전 확인 등 다양한 관리가 가능
    • 규칙적으로 lock 파일 관리 및 의존성 업데이트가 가능해져 협업 및 배포 환경에서 일관성 확보에 장점
  • UV를 활용한 파이썬 개발 워크플로우 혁신하기 | GeekNews
    • [원문] uv: Making Python Local Workflows FAST and BORING in 2025 - YouTube
      1. uv 핵심 명령어 활용
        • uv run: pyproject.toml에 정의되고 uv.lock 파일에 고정된 의존성을 사용하여 가상 환경 내에서 pytest나 fastapi 같은 명령어를 실행합니다.
        • uv add: 새로운 의존성을 pyproject.toml에 추가하고 uv.lock 파일을 자동으로 업데이트합니다.
        • uv run --with: 프로젝트의 핵심 의존성에 추가하지 않고 pdbpp와 같은 개발용 헬퍼 모듈을 일시적으로 주입하여 사용할 수 있습니다.
        • uv lock --upgrade: 의존성 잠금 파일을 매우 빠른 속도로 업데이트합니다. uv run은 실행 시 자동으로 변경된 잠금 파일을 감지하고 환경을 동기화합니다.
      2. justfile을 사용하여 반복적인 작업을 레시피(recipe)로 표준화
      3. just와 uv의 연동
      4. 가상 환경 직접 관리 (선택적 워크플로우)
  • Uv: 의존성이 있는 스크립트 실행하기 | GeekNews
    • [원문] Running scripts | uv
    • uv를 사용하면 Python 스크립트 실행 시 의존성 관리를 자동화함
    • 별도의 가상환경 관리 없이 스크립트별로 환경이 자동으로 생성 및 유지됨
    • 필요한 패키지는 inline metadata 또는 명령행 옵션 등 다양한 방식으로 선언 가능함
    • Python 버전과 패키지 관리도 스크립트 단위로 선언 및 자동 조정 가능함
    • Lock 파일과 의존성 버전 제한 옵션 등으로 재현성과 유지관리성을 높임
  • uv가 이렇게 빨라진 이유 | GeekNews
    • [원문] How uv got so fast | Andrew Nesbitt
    • Python 패키지 관리자 uv는 pip보다 10배 이상 빠른 설치 속도를 보이며, 이는 단순히 Rust로 작성되었기 때문이 아니라 설계상의 선택에서 비롯됨
    • 속도를 가능하게 한 핵심은 정적 메타데이터 표준(PEP 518, 517, 621, 658) 으로, 코드 실행 없이 의존성을 파악할 수 있게 함
    • uv는 pip이 유지하는 레거시 기능(.egg, pip.conf, 시스템 Python 설치 등) 을 과감히 제거해 불필요한 코드 경로를 없앰
    • Rust가 기여한 부분은 제로-카피 역직렬화, 락 없는 동시성, 단일 바이너리 구조 등으로, 전체 속도 향상 중 일부만 차지함
    • 전체적으로 uv의 사례는 표준화된 메타데이터와 불필요한 호환성 제거가 성능 혁신의 핵심임을 보여줌