uv: một công cụ thay pip, venv, pyenv, pipx cho Python, nhanh hơn nhiều lần
Tóm tắt
uv của Astral thay pyenv, venv, pip, pip-tools, pipx bằng một lệnh, theo README nhanh hơn pip 10–100 lần. Dùng uv init, uv add, uv run, uvx; commit uv.lock và chạy uv sync --locked trong CI.
Bắt đầu một project Python từng cần cả chục công cụ: pyenv để cài phiên bản Python, virtualenv để tạo môi trường, pip để cài gói, pip-tools hoặc Poetry để khoá phiên bản, pipx để cài công cụ dòng lệnh. Mỗi công cụ một cách dùng, và cài dependency cho project lớn có thể mất vài phút. uv của Astral, viết bằng Rust, thay thế cả bộ đó bằng một lệnh duy nhất, và theo README nhanh hơn pip từ 10 đến 100 lần.

Cài đặt
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# Hoặc
pipx install uv # pip install uv
brew install uv
Quản lý project
uv init my-api # tạo project: pyproject.toml, .python-version, main.py
cd my-api
uv add fastapi uvicorn # thêm dependency, cập nhật pyproject.toml và uv.lock
uv add --dev pytest # dependency cho phát triển
uv run main.py # chạy trong môi trường của project (tự tạo .venv nếu chưa có)
uv run pytest
uv sync # cài đúng theo uv.lock, ví dụ sau khi clone repo
uv lock --upgrade # nâng cấp phiên bản trong lock file
uv remove uvicorn
Bạn không cần "activate" virtualenv: uv run luôn chạy trong môi trường đúng của project và tự đồng bộ dependency trước khi chạy.
uv thay thế những gì?
| Trước đây | Với uv |
|---|---|
pyenv install 3.12 | uv python install 3.12 |
python -m venv .venv | uv venv |
pip install -r requirements.txt | uv pip install -r requirements.txt |
pip-compile, poetry lock | uv lock |
pipx install ruff | uv tool install ruff |
pipx run black . | uvx black . |
Giao diện uv pip tương thích với lệnh pip quen thuộc, nên có thể chuyển dần project cũ mà không phải đổi cấu trúc ngay.
Script một file có dependency
uv hỗ trợ khai báo dependency ngay trong đầu file script (inline metadata):
uv init --script fetch.py
uv add --script fetch.py requests rich
uv run fetch.py # uv tự tạo môi trường tạm với requests, rich
Rất hợp cho script tiện ích chia sẻ trong team: gửi một file là chạy được, không cần hướng dẫn cài đặt.
Lưu ý
- Commit cả
pyproject.tomlvàuv.lock; trong CI dùnguv sync --lockedđể báo lỗi nếu lock file lệch với khai báo. - Python do uv cài nằm trong thư mục riêng của uv, không đụng tới Python hệ thống.
- Với project Poetry hay pip-tools đang chạy ổn, chuyển đổi nên làm theo từng bước và kiểm tra lại phiên bản dependency sau khi lock.
Áp dụng thế nào?
- Dev: Dùng
uv initcho project mới,uvxđể chạy công cụ một lần, vàuv runthay cho việc activate venv. - Tech Lead: Thống nhất uv cho cả team và CI: một công cụ, một lock file, cài nhanh hơn đáng kể nên pipeline ngắn lại.
- PM: Thời gian setup môi trường Python của dev mới giảm từ "một buổi" xuống vài lệnh; CI nhanh hơn cũng là tiền tiết kiệm được.
Nguồn & tham khảo
- astral-sh/uv — astral-sh (GitHub)
- uv documentation — astral-sh