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
# 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
# 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
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
uv sync
Thêm phụ thuộc:
bash
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
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
# 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
# Tạo một tập lệnh mới
uv init --script
bash
# /// 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
uv run script.py
💡 Trên *nix, thêm
#!/usr/bin/env -S uv run
(sau đóchmod +x
) để tự động gọiuv 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
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
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
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
# 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
uv run --with pre-commit-uv pre-commit run --all-files
pre-commit-uv
GitHub Actions
bash
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
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ườngUV_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?