UV
UV
는 Rust로 작성된 Python 패키지 및 프로젝트 관리자로 pip
의 대안으로 떠오르는 패키지 관리자입니다.
Highlights
🚀 pip, pip-tools, pipx, poetry, pyenv, twine, virtualenv 등을 대체하는 단일 도구입니다.
⚡️ pip보다 10-100배 빠릅니다.
🗂️ 범용 잠금 파일을 통한 포괄적인 프로젝트 관리를 제공합니다.
❇️ 인라인 의존성 메타데이터를 지원하여 스크립트를 실행합니다.
🐍 Python 버전을 설치하고 관리합니다.
🛠️ Python 패키지로 게시된 도구를 실행하고 설치합니다.
🔩 친숙한 CLI로 성능 향상을 위한 pip 호환 인터페이스를 포함합니다.
🏢 확장 가능한 프로젝트를 위한 Cargo 스타일 워크스페이스를 지원합니다.
💾 의존성 중복 제거를 위한 글로벌 캐시로 디스크 공간을 효율적으로 사용합니다.
⏬ curl 또는 pip을 통해 Rust나 Python 없이도 설치 가능합니다.
🖥️ macOS, Linux, Windows를 지원합니다.
Installation
/> # python --version
Python 2.7.18 <<<---- 운영체제 Python 버전
/> # curl -LsSf https://astral.sh/uv/install.sh | sh
downloading uv 0.8.4 x86_64-unknown-linux-gnu
no checksums to verify
installing to /root/.local/bin
uv
uvx
everything's installed!
To add $HOME/.local/bin to your PATH, either restart your shell or run:
source $HOME/.local/bin/env (sh, bash, zsh)
source $HOME/.local/bin/env.fish (fish)
How to
프로젝트 초기화
/> # uv init uv-test
Initialized project `uv-test` at `/root/uv-test`
/> # cd uv-test; tree -a
.
├── main.py
├── pyproject.toml <<--- 프로젝트의 메타데이터와 설정을 저장하는 파일
├── .python-version <<--- 프로젝트에서 사용할 Python 버전을 지정하는 파일
└── README.md
의존성 패키지 추가
/> uv add flask
Using CPython 3.7.16 interpreter at: /usr/bin/python3.7
Creating virtual environment at: .venv
Resolved 24 packages in 115ms
Prepared 9 packages in 53ms
Installed 9 packages in 15ms
+ click==8.1.8
+ flask==2.2.5
+ importlib-metadata==6.7.0
+ itsdangerous==2.1.2
+ jinja2==3.1.6
+ markupsafe==2.1.5
+ typing-extensions==4.7.1
+ werkzeug==2.2.3
+ zipp==3.15.0
/> # cat uv.lock
version = 1
revision = 3
requires-python = ">=3.7"
resolution-markers = [
"python_full_version >= '3.10'",
"python_full_version == '3.9.*'",
"python_full_version == '3.8.*'",
"python_full_version < '3.8'",
]
... skip
/> # uv pip freeze > requirements.txt
/> # cat requirements.txt
click==8.1.8
flask==2.2.5
importlib-metadata==6.7.0
itsdangerous==2.1.2
jinja2==3.1.6
markupsafe==2.1.5
typing-extensions==4.7.1
werkzeug==2.2.3
zipp==3.15.0
의존성 패키지 제거
/> # uv add flask_cors
Resolved 26 packages in 42ms
Prepared 1 package in 11ms
Installed 1 package in 1ms
+ flask-cors==5.0.0
/> # uv remove flask-cors
Resolved 24 packages in 41ms
Uninstalled 1 package in 0.40ms
- flask-cors==5.0.0
/> # uv pip freeze > requirements.txt
/> # cat requirements.txt
click==8.1.8
flask==2.2.5
importlib-metadata==6.7.0
itsdangerous==2.1.2
jinja2==3.1.6
markupsafe==2.1.5
typing-extensions==4.7.1
werkzeug==2.2.3
zipp==3.15.0
패키지 버전 고정
/> # uv lock
Resolved 24 packages in 0.80ms
가상 환경 생성
/> # uv venv
Using CPython 3.7.16 interpreter at: /usr/bin/python3.7
Creating virtual environment at: .venv
✔ A virtual environment already exists at `.venv`. Do you want to replace it? · yes
Activate with: source .venv/bin/activate
UV 프로젝트로 실행
/> # uv run main.py
Installed 9 packages in 16ms
Flask 버전: 2.2.5
Python 버전: 3.7.16 (default, Jun 27 2025, 23:12:33)
...
테스트 결과 :
$ curl -s 172.31.46.51:5000 | egrep "\"version-l|\"version-v"
<div class="version-label">Flask Version:</div>
<div class="version-value">2.2.5</div>
<div class="version-label">Python Version:</div>
<div class="version-value">3.7.16 (default, Jun 27 2025, 23:12:33)
프로젝트 이외 경로에서 실행 방안
/> # uv run --project /root/uv-test /root/uv-test/main.py
pip 과 비교
기존 pip 을 통해 패키지를 설치하고 관리하는 방법에 비해 매우 빠른 성능으로 패키지를 설치 관리 할 수 있었습니다.
실제 대규모 프로젝트에서는 많은 의존성으로 인해 빌드 과정이 복잡해질 것이며, UV 를 사용하게되면 성능적 (속도)으로 효과적인 개선 효과를 만들 수 있을 것으로 기대합니다.