0
0
Lập trình
Thaycacac
Thaycacac thaycacac

uv: Công cụ Python Thay Thế pipx, pyenv và Hơn Thế Nữa

Đăng vào 1 ngày trước

• 4 phút đọc

Tổng Quan

uv là một giải pháp toàn diện để quản lý dự án Python,
công cụ dòng lệnh,
các tập lệnh đơn và ngay cả
Python.

Hãy nghĩ về nó như là Cargo của Python: một công cụ thống nhất, đa nền tảng, nhanh chóng, đáng tin cậy và dễ sử dụng.

Bài viết này không phải là một hướng dẫn sâu về uv — đã có nhiều bài viết xuất sắc khác; thay vào đó,
đây là một bảng tóm tắt ngắn gọn cho việc sử dụng hàng ngày.

Cài Đặt & Cập Nhật

bash Copy
# Cài đặt
curl -LsSf https://astral.sh/uv/install.sh | sh

# Cập nhật
uv self update

Quản Lý Phiên Bản Python

Thay vì phải sử dụng các công cụ như pyenv, mise, asdf, hoặc các thủ thuật riêng của hệ điều hành, bạn có thể đơn giản sử dụng uv:

bash Copy
# Liệt kê các phiên bản có sẵn
uv python list

# Cài đặt Python 3.13
uv python install 3.13
  • Hoạt động giống nhau trên tất cả các hệ điều hành
  • Không cần quyền quản trị
  • Độc lập với Python hệ thống

Bạn cũng có thể sử dụng mise cùng với uv nếu bạn thích một trình quản lý phiên bản toàn cầu.

Dự Án & Phụ Thuộc

Khởi tạo một dự án mới (tạo tự động một file pyproject.toml):

bash Copy
uv init myproject hoặc # uv init -p 3.13 --name myproject
cd myproject

Đồng bộ phụ thuộc (tương tự như pip install -r requirements.txt, nhưng nhanh hơn và đáng tin cậy hơn):

bash Copy
uv sync

Thêm phụ thuộc:

bash Copy
uv add litestar
uv add pytest --dev

Khóa phụ thuộc (tạo một file khóa đa nền tảng, giống như Pipfile.lock hoặc poetry.lock):

bash Copy
uv lock

💡 File khóa là đa nền tảng, vì vậy bạn có thể phát triển trên Windows và triển khai trên Linux.

Môi Trường Ảo Nhanh

bash Copy
# Tạo và kích hoạt venv tự động
uv venv
source .venv/bin/activate

# Hoặc bỏ qua kích hoạt và chạy trực tiếp với uv:
uv run python app.py

Tập Lệnh

bash Copy
# Tạo một tập lệnh mới
uv init --script
bash Copy
# /// tập lệnh
# requires-python = ">=3.13"
# phụ thuộc = [
#     "requests",
# ]
# ///
import requests

print(requests.get("https://akrisanov.com"))

Chạy các tập lệnh đơn với việc cài đặt phụ thuộc tự động:

bash Copy
uv run script.py

💡 Trên *nix, thêm #!/usr/bin/env -S uv run (sau đó chmod +x) để tự động gọi uv run cho một tập lệnh.

Công Cụ

Cài đặt các công cụ CLI toàn cầu, tách biệt khỏi Python hệ thống:

bash Copy
uv tool install ruff # thay thế pipx
uv tool install httpie

uvx httpie # một phím tắt

# --with [phụ thuộc tạm thời] chạy jupyter trong dự án hiện tại
# mà không thêm nó và các phụ thuộc của nó vào dự án
uv run --with jupyter jupyter notebook

💡 uv chạy đủ nhanh để tự động re-lock và re-sync dự án mỗi lần, giữ cho môi trường của bạn
luôn được cập nhật.

Nếu bạn đang phát triển một công cụ CLI, uv có thể giúp giảm thiểu sự cản trở:

bash Copy
uv init --package your_tool
uv tool install . -e

Xem tài liệu về các công cụ

Thay Thế pip-tools

bash Copy
uv pip compile # thay thế pip-tools compile
uv pip sync    # thay thế pip-tools sync

Xây Dựng và Xuất Bản Gói

bash Copy
# Xây dựng một gói `.whl` cho PyPI
uv build
# Tải lên gói Python của bạn lên PyPI
uv publish

Pre-commit Hooks

bash Copy
uv run --with pre-commit-uv pre-commit run --all-files
pre-commit-uv

GitHub Actions

bash Copy
astral-sh/setup-uv # mang UV vào GitHub Actions

Docker

Các hình ảnh Docker chính thức cung cấp uv và Python đã được cài đặt:

bash Copy
ghcr.io/astral-sh/uv:latest

Ngoài ra, hãy kiểm tra các Container Docker Python sẵn sàng cho sản xuất với uv của Hynek Schlawack.

Không Gian Làm Việc

uv hỗ trợ tổ chức một hoặc nhiều gói trong một không gian làm việc
để quản lý chúng cùng nhau.

Ví dụ: bạn có thể có một ứng dụng web FastAPI bên cạnh một số thư viện, tất cả được phiên bản hóa và duy trì như các gói Python riêng biệt trong cùng một kho lưu trữ Git.

Trong một không gian làm việc, mỗi gói có file pyproject.toml riêng, nhưng không gian làm việc chia sẻ một file khóa duy nhất, đảm bảo rằng
không gian làm việc hoạt động với một tập hợp phụ thuộc nhất quán.

Những Điều Cần Lưu Ý

  • uv sync tôn trọng .python-version, nhưng biến môi trường UV_PYTHON có ưu tiên hơn
  • Sử dụng python‑build‑standalone, có thể chậm hơn một chút so với các bản dựng hệ thống (~1–3%) và thiếu các tối ưu hóa cụ thể cho CPU
  • Kích thước cache có thể trở nên lớn (một thỏa hiệp cho tốc độ và độ tin cậy)
  • Các dự án cũ có thể gặp lỗi nếu chúng phụ thuộc vào các quy tắc giải quyết phụ thuộc lỏng lẻo hơn của pip

Tại Sao uv Quan Trọng

Python luôn có một hệ sinh thái công cụ bị phân mảnh: pip, pip-tools, virtualenv, venv, pipx, pyenv, poetry, tox…

Với uv, cuối cùng chúng ta có một thứ gần giống như Cargo của Rust hoặc npm/pnpm của JavaScript:
một công cụ duy nhất, nhất quán, đa nền tảng cho môi trường, phụ thuộc, tập lệnh và công cụ — và nó nhanh.

Tài Liệu & Đọc Thêm

  • Nguồn Phụ Thuộc — giải thích cách uv giải quyết phụ thuộc
  • UV với Django
  • PEP 723 – Metadata tập lệnh nội tuyến
  • WIP: Sử dụng uv run như một trình chạy tác vụ

Ghi Chú Thêm

  • Trong khi một số người không quan tâm đến việc uv nhanh, nó đã tiết kiệm được vài phút cho việc xây dựng CI và xây dựng lại container — tiết kiệm tiền và năng lượng.
  • Astral đã tận dụng một dự án rất hứa hẹn có tên gọi python-build-standalone và hiện đang duy trì nó. Đây là những bản dựng Python hoạt động mà không cần trình cài đặt.

Tôi rất muốn biết bạn đã thử uv chưa — cấu hình của bạn như thế nào?

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào