uv¶
Rust로 작성된 매우 빠른 파이썬 패키지 및 프로젝트 관리자.
  
  
캐시가 준비된 상태에서 Trio의 의존성을 설치하는 과정.
주요 특징¶
- 🚀 
pip,pip-tools,pipx,poetry,pyenv,twine,virtualenv등을 대체할 수 있는 단일 도구. - ⚡️ 
pip보다 10-100배 빠른 성능. - 🗂️ 프로젝트 관리를 포괄적으로 지원하며, 범용 lockfile을 제공.
 - ❇️ 스크립트 실행을 지원하며, 인라인 의존성 메타데이터를 포함.
 - 🐍 Python 버전을 설치하고 관리할 수 있음.
 - 🛠️ Python 패키지로 배포된 도구를 실행하고 설치할 수 있음.
 - 🔩 익숙한 CLI와 함께 성능 향상을 위한 pip 호환 인터페이스를 제공.
 - 🏢 확장 가능한 프로젝트를 위한 Cargo 스타일 워크스페이스 지원.
 - 💾 디스크 공간을 효율적으로 사용하며, 의존성 중복 제거를 위한 글로벌 캐시를 제공.
 - ⏬ Rust나 Python 없이도 
curl또는pip로 설치 가능. - 🖥️ macOS, Linux, Windows를 지원.
 
설치¶
공식 독립형 설치 프로그램을 사용해 uv를 설치한다:
=== "macOS와 Linux"
```console
$ curl -LsSf https://astral.sh/uv/install.sh | sh
```
=== "Windows"
```console
$ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
```
설치가 완료되면 첫걸음을 확인하거나 간단한 개요를 읽어보자.
Tip
uv는 pip, Homebrew 등 다양한 방법으로도 설치할 수 있다. 모든 설치 방법은 설치 페이지에서 확인할 수 있다.
프로젝트 관리¶
uv는 rye나 poetry와 유사하게 프로젝트 의존성과 환경을 관리한다. 락 파일, 워크스페이스 등의 기능을 지원한다:
$ uv init example
`example` 프로젝트를 `/home/user/example`에 초기화함
$ cd example
$ uv add ruff
.venv에 가상 환경 생성
170ms 만에 2개의 패키지 해결
   file:///home/user/example에서 example @ 빌드
627ms 만에 2개의 패키지 준비
1ms 만에 2개의 패키지 설치
 + file:///home/user/example에서 example==0.1.0
 + ruff==0.5.4
$ uv run ruff check
모든 체크 통과!
$ uv lock
0.33ms 만에 2개의 패키지 해결
$ uv sync
0.70ms 만에 2개의 패키지 해결
0.02ms 만에 1개의 패키지 검사
시작하기 위해 프로젝트 가이드를 참고한다.
uv는 uv로 관리되지 않는 프로젝트도 빌드하고 배포할 수 있다. 자세한 내용은 패키징 가이드를 확인한다.
스크립트 관리¶
uv는 단일 파일 스크립트의 의존성과 환경을 관리한다.
새로운 스크립트를 생성하고, 의존성을 선언하는 인라인 메타데이터를 추가한다:
$ echo 'import requests; print(requests.get("https://astral.sh"))' > example.py
$ uv add --script example.py requests
Updated `example.py`
그런 다음, 스크립트를 격리된 가상 환경에서 실행한다:
$ uv run example.py
Reading inline script metadata from: example.py
Installed 5 packages in 12ms
<Response [200]>
시작 가이드는 스크립트 가이드를 참고한다.
도구¶
uv는 pipx와 유사하게 Python 패키지가 제공하는 커맨드라인 도구를 실행하고 설치한다.
uvx(uv tool run의 별칭)를 사용해 임시 환경에서 도구를 실행할 수 있다:
$ uvx pycowsay 'hello world!'
Resolved 1 package in 167ms
Installed 1 package in 9ms
 + pycowsay==0.0.0.2
  """
  ------------
< hello world! >
  ------------
   \   ^__^
    \  (oo)\_______
       (__)\       )\/\
           ||----w |
           ||     ||
uv tool install을 사용해 도구를 설치할 수 있다:
$ uv tool install ruff
Resolved 1 package in 6ms
Installed 1 package in 2ms
 + ruff==0.5.4
Installed 1 executable: ruff
$ ruff --version
ruff 0.5.4
시작하려면 도구 가이드를 참고한다.
파이썬 버전 관리¶
uv는 파이썬을 설치하고 버전 간 빠른 전환을 지원한다.
여러 파이썬 버전을 동시에 설치하려면:
$ uv python install 3.10 3.11 3.12
Searching for Python versions matching: Python 3.10
Searching for Python versions matching: Python 3.11
Searching for Python versions matching: Python 3.12
Installed 3 versions in 3.42s
 + cpython-3.10.14-macos-aarch64-none
 + cpython-3.11.9-macos-aarch64-none
 + cpython-3.12.4-macos-aarch64-none
필요한 파이썬 버전을 다운로드하려면:
$ uv venv --python 3.12.0
Using CPython 3.12.0
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate
$ uv run --python pypy@3.8 -- python
Python 3.8.16 (a9dbdca6fc3286b0addd2240f11d97d8e8de187a, Dec 29 2022, 11:45:30)
[PyPy 7.3.11 with GCC Apple LLVM 13.1.6 (clang-1316.0.21.2.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>>
현재 디렉토리에서 특정 파이썬 버전을 사용하려면:
$ uv python pin 3.11
Pinned `.python-version` to `3.11`
파이썬 설치 가이드를 참고하여 시작해 보자. 파이썬 설치 가이드
pip 인터페이스¶
uv는 pip, pip-tools, virtualenv 명령어를 대체할 수 있는 툴을 제공한다. uv는 기존 인터페이스에 의존성 버전 오버라이드, 플랫폼 독립적 해결, 재현 가능한 해결, 대체 해결 전략 등 고급 기능을 추가한다.
기존 워크플로우를 변경하지 않고 uv로 마이그레이션하면 10~100배의 속도 향상을 경험할 수 있다. uv pip 인터페이스를 통해 이를 확인할 수 있다.
플랫폼 독립적 요구사항 파일을 컴파일하려면:
$ uv pip compile docs/requirements.in \
   --universal \
   --output-file docs/requirements.txt
Resolved 43 packages in 12ms
가상 환경을 생성하려면:
$ uv venv
Using CPython 3.12.3
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate
잠긴 요구사항을 설치하려면:
$ uv pip sync docs/requirements.txt
Resolved 43 packages in 11ms
Installed 43 packages in 208ms
 + babel==2.15.0
 + black==24.4.2
 + certifi==2024.7.4
 ...
시작하려면 pip 인터페이스 문서를 참고한다.