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 인터페이스 문서를 참고한다.