uv: Trình quản lý gói Python tốc độ cao thay thế pip, poetry, pipx

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.

Minh họa nội dung bài viết

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 | sh xong 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.

Minh họa nội dung bài viết

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.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Docker container illustration - khái niệm container hóa

Docker: Container hóa ứng dụng từ cơ bản đến production

Docker là nền tảng mã nguồn mở cho phép đóng gói, vận hành và phân phối ứng dụng trong môi trường được cô lập gọi là container. Khi các ứng…

Xem thêm

Ghostty: Terminal GPU-rendered thay thế iTerm2 và Alacritty

Ghostty: Terminal GPU-rendered thay thế iTerm2 và Alacritty Ghostty là terminal emulator mới phát hành phiên bản 1.0 vào cuối 2024, được viết bằng Zig và sử dụng GPU rendering…

Xem thêm

Feather Robotics: Nền tảng robot mô-đun giá 30k USD cho developer

Feather Robotics, khởi nghiệp humanoid do cựu kỹ sư Tesla và founder trước của 1X thành lập, đang định vị mình là “Android of robotics” — cung cấp nền tảng…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất