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, virtualenvpython 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 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 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--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

Numba JIT: Tăng tốc Python 100x cho tính toán số học

Numba JIT: Tăng tốc Python 100x cho tính toán số học chuyên Python là ngôn ngữ phổ biến trong khoa học dữ liệu và học máy, nhưng tốc độ thực…

Xem thêm

Bun Runtime: JavaScript runtime thay thế Node.js tốc độ 4x

Từng là thứ chỉ có chạy được trên trình duyệt, giờ JavaScript đã có cả trình runtime riêng biệt. Và trong số những Node.js thay thế, Bun đang trở thành…

Xem thêm

Tauri 2.0: Framework desktop app gọn nhẹ thay thế Electron

Tauri 2.0: Framework desktop app gọn nhẹ thay thế Electron cho developer Khi nhắc đến ứng dụng desktop viết bằng web technology, Electron đã thống trị hơn một thập kỷ…

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