
uv: Trình quản lý gói Python tốc độ cao thay thế pip, poetry, pipx
uv là công cụ quản lý gói và dự án Python mới viết bằng Rust, phát triển bởi Astral (tác giả Ruff linter). uv thay thế đồng thời pip, pip-tools, pipx, poetry, pdm, virtualenv và python launcher — tất cả trong một binary đơn lẻ, nhanh 10-100x so với công cụ truyền thống.

Tại sao uv nhanh đến vậy?
- Viết bằng Rust: Không có GIL, song song hóa tự nhiên, quản lý bộ nhớ thủ công hiệu quả. Rust cho phép kiểm soát bộ nhớ cấp thấp mà không bị rò rỉ.
- Giải pháp phụ thuộc tối ưu: Sử dụng thuật toán PubGrub (cùng Pub/Dart) giải quyết dependency resolution nhanh hơn backtracking truyền thống. PubGrub đảm bảo tìm được giải pháp nếu tồn tại, hoặc báo lỗi đúng nguyên nhân.
- Cache toàn cục aggressively: Mỗi gói tải về một lần, tái dùng cho mọi môi trường ảo, không tải lại metadata PyPI. Cache được chia sẻ giữa tất cả dự án trên cùng máy.
- Hard-link thay vì copy: Trên cùng filesystem, uv hard-link file từ cache vào venv — cài đặt gần như tức thì. Không tốn dung lượng ổ cứng thêm cho mỗi môi trường.
- Binary đơn lẻ: Không phụ thuộc Python runtime, cài đặt qua
curl -LsSf https://astral.sh/uv/install.sh | shxong dùng ngay. Không gặp vấn đề “pip không hoạt động vì Python version mismatch”.
Cài đặt và lệnh cơ bản
# Cài đặt uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# Tạo dự án mới (thay poetry init)
uv init my-project
cd my-project
# Tạo venv và cài dependencies từ pyproject.toml
uv sync
# Thêm gói (thay poetry add / pip install)
uv add requests pandas numpy
uv add --dev pytest ruff black
# Chạy lệnh trong venv (không cần source activate)
uv run python main.py
uv run pytest
# Cài tool toàn cục (thay pipx)
uv tool install ruff
uv tool run black --version
Quản lý dự án với pyproject.toml chuẩn PEP 621
uv dùng pyproject.toml chuẩn hóa (PEP 621, PEP 735) — không file lock riêng biệt, không format proprietary:
[project]
name = "my-project"
version = "0.1.0"
description = "Mô tả dự án"
readme = "README.md"
requires-python = ">=3.10"
dependencies = [
"requests>=2.31",
"pandas>=2.0",
]
[project.optional-dependencies]
dev = ["pytest>=7.4", "ruff>=0.5", "black>=24.0"]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.uv]
dev-dependencies = ["pytest", "ruff", "black"]
uv lock sinh uv.lock (format tương thích pip-tools) — cam kết reproducible build.

Quản lý phiên bản Python tích hợp
uv cài đặt và quản lý Python runtime:
# Liệt kê Python có sẵn
uv python list
# Cài Python 3.12
uv python install 3.12
# Tạo venv với Python cụ thể
uv venv --python 3.12
# Chạy script với Python version chỉ định (tự tải nếu thiếu)
uv run --python 3.11 script.py
Tính năng này loại bỏ nhu cầu pyenv, asdf, conda cho đa số trường hợp.
So sánh uv vs công cụ hiện có
| Tính năng | uv | poetry | pdm | pip + pip-tools |
|---|---|---|---|---|
| Tốc độ cài đặt | ⭐⭐⭐⭐⭐ (10-100x) | ⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
| Dependency resolution | PubGrub (chuẩn) | Custom (chậm) | PubGrub | pip-tools (backtracking) |
| Lock file | uv.lock (PEP 735) | poetry.lock (proprietary) | pdm.lock | requirements.txt |
| Quản lý Python | Có (built-in) | Không | Có | Không |
| Cài tool toàn cục | uv tool (thay pipx) | Không | Không | pipx riêng |
| Chạy script đơn | uv run script.py | poetry run | pdm run | python script.py |
| Publish PyPI | uv publish | poetry publish | pdm publish | twine riêng |
| Workspace/monorepo | uv workspace (beta) | Không | Có | Không |
Di chuyển từ poetry / pip-tools / pipx
# Từ poetry
uv sync --frozen # dùng uv.lock hiện có
# Hoặc convert: uv import poetry.lock
# Từ pip-tools (requirements.in -> requirements.txt)
uv pip compile requirements.in -o requirements.txt
# Từ pipx
uv tool install # thay pipx install
uv tool run # thay pipx run
Hiệu suất thực tế (benchmark Astral)
- Tạo venv + cài 100 gói: uv ~2s vs poetry ~45s vs pip ~30s
- Resolve dependencies lớn (Django, pandas, torch): uv ~1.5s vs poetry ~12s
- Cold start (chưa cache): uv nhanh 5-10x nhờ tải song song, giải pháp nhanh.
- Warm start (có cache): uv gần như tức thì (<100ms) nhờ hard-link.
Chi tiết benchmark: GitHub uv repo.
Tích hợp CI/CD và Docker
uv tích hợp mượt mà với pipeline hiện đại. Trong GitHub Actions, dùng action astral-sh/setup-uv để cài uv chỉ trong vài giây. Với Docker, uv hỗ trợ --compile-bytecode và --link-mode=copy để build image sản xuất tối ưu:
# Dockerfile tối ưu với uv
FROM python:3.12-slim
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
WORKDIR /app
COPY pyproject.toml uv.lock ./
RUN uv sync --frozen --no-dev
COPY . .
CMD ["uv", "run", "python", "main.py"]
Cách này tận dụng cache layer Docker, giảm thời gian build từ phút xuống giây.
Khi nào KHÔNG nên dùng uv?
- Dự án legacy Python < 3.8 (uv yêu cầu Python 3.8+ để chạy, nhưng có thể quản lý venv 3.7+).
- Cần tính năng poetry plugin ecosystem đặc thù (build plugin, export plugin).
- Team chưa sẵn sàng chuyển đổi workflow (lock file format khác, CI cần cập nhật).
Kết luận
uv không chỉ “một pip nhanh hơn” — nó thống nhất toàn bộ toolchain Python thành một binary duy nhất: quản lý gói, virtualenv, Python version, tool toàn cục, chạy script, build/publish. Với hiệu suất bậc nhất, chuẩn hóa PEP 621/735, và phát triển cực nhanh (release hàng tuần), uv đang trở thành tiêu chuẩn de facto cho Python hiện đại. Năm 2025, bắt đầu dự án mới với uv init là lựa chọn hợp lý nhất cho developer Python.
