Vẫn đang xoay sở với pip install
, requirements.txt
, và kích hoạt môi trường ảo thủ công? Hãy chuẩn bị cho một nâng cấp lớn. Bài viết này giới thiệu UV, một công cụ tất-cả-trong-một mang tính cách mạng, sẵn sàng thay thế quy trình làm việc Python truyền thống của bạn. Nếu bạn viết bất kỳ mã Python nào và khao khát tốc độ cũng như sự đơn giản, bạn sẽ tìm hiểu cách UV tích hợp cài đặt gói, quản lý môi trường và thậm chí xử lý phiên bản Python vào một giao diện dòng lệnh duy nhất, nhanh như chớp.
Nếu bạn vẫn đang sử dụng pip
hoặc tự tạo môi trường ảo theo cách thủ công, thì bạn cần đọc bài viết này. Chỉ trong vài phút, tôi sẽ giới thiệu một công cụ có thể thay đổi hoàn toàn cuộc sống của bạn nếu bạn viết bất kỳ mã nào bằng Python. Công cụ đó là UV, một trình quản lý gói và dự án Python nhanh hơn gấp gần 100 lần so với pip trong một số tình huống nhất định.
Vâng, bạn không nghe nhầm đâu. Bạn có thể xem ví dụ tại đây từ [trang web của UV][1].
UV hợp nhất các tác vụ như quản lý môi trường ảo và cài đặt các dependency (phụ thuộc - thường được xử lý bởi pip
) vào một công cụ liền mạch duy nhất. Bạn sẽ thấy cách nó hoạt động, và tôi hứa với bạn rằng nó tốt hơn đáng kể so với việc xoay sở thủ công với các môi trường ảo, tệp requirements.txt
và pip install
. Sau khi tìm hiểu về UV, nó có thể trở thành công cụ duy nhất bạn sử dụng từ bây giờ.
Cài đặt & Thiết lập UV
Đầu tiên, hãy cài đặt UV. Bạn có thể tìm thấy hướng dẫn cài đặt chi tiết trong [tài liệu chính thức][2].
- Mac/Linux: Sử dụng
curl
hoặcwget
:# Sử dụng curl curl -LsSf https://astral.sh/uv/install.sh | sh
- Windows: Sử dụng PowerShell:
irm https://astral.sh/uv/install.ps1 | iex
- Sử dụng Pip (Đa nền tảng): Nếu bạn thích sử dụng
pip
(hoặcpip3
tùy thuộc vào hệ thống của bạn):pip install uv # hoặc pip3 install uv
Sau khi cài đặt, hãy khởi động lại terminal của bạn. Để xác minh cài đặt, chỉ cần gõ:
uv
Nếu bạn thấy đầu ra liệt kê các lệnh UV khác nhau, bạn đã sẵn sàng! [Tài liệu UV][2] rất tuyệt vời, nhưng hướng dẫn này sẽ giúp làm rõ những điều cơ bản và giúp bạn bắt đầu nhanh chóng.
Quản lý phiên bản Python với UV
Một trong những tính năng mạnh mẽ của UV là khả năng quản lý trực tiếp các bản cài đặt Python.
-
Liệt kê các phiên bản có sẵn/đã cài đặt: Xem phiên bản Python nào UV biết và phiên bản nào bạn đã tải xuống.
uv python list
Lưu ý: UV hoạt động với Python 3.8 trở lên.
-
Cài đặt một phiên bản cụ thể: Tải xuống và cài đặt một phiên bản Python (ví dụ: 3.8).
uv python install 3.8
Hãy chú ý tốc độ đáng kinh ngạc của nó! UV được viết bằng Rust và được tối ưu hóa rất nhiều.
-
Tìm một phiên bản đã cài đặt: Xác định vị trí một phiên bản đã cài đặt cụ thể.
uv python find 3.8
-
Gỡ cài đặt một phiên bản: Xóa một phiên bản Python đã cài đặt trước đó.
uv python uninstall <version_identifier>
Sử dụng UV cho các Script đơn lẻ
UV đơn giản hóa việc chạy các script Python độc lập, đặc biệt là những script có các dependency hoặc yêu cầu phiên bản Python cụ thể.
Hãy bắt đầu với một main.py
đơn giản:
# main.py
import sys
print(sys.version)
-
Chạy một script: Thực thi script bằng Python mặc định được tìm thấy bởi UV.
uv run main.py
-
Chạy với một phiên bản Python cụ thể: Sử dụng cờ
--python
.uv run --python 3.9 main.py # Hoặc cụ thể hơn uv run --python 3.9.21 main.py
UV sẽ sử dụng phiên bản được chỉ định (nếu đã cài đặt). Không cần chuyển đổi môi trường thủ công!
-
Chạy với các dependency tạm thời: Điều gì sẽ xảy ra nếu script của bạn cần các gói như
rich
hoặcrequests
?# main.py (đã cập nhật) from rich import print import requests print("Hello from [bold magenta]Rich![/bold magenta]") # ... phần còn lại của script sử dụng requests ...
Thay vì tạo môi trường và cài đặt, hãy sử dụng cờ
--with
. UV xử lý tạm thời cho lần chạy đó:uv run --python 3.9 --with rich --with requests main.py
UV tự động cài đặt các gói cần thiết (và lưu vào bộ nhớ đệm) trước khi chạy script của bạn. Điều này hoàn hảo cho các script đơn giản mà không cần thiết lập dự án đầy đủ.
Nhúng cấu hình vào Script
Việc gõ --python
và --with
lặp đi lặp lại có thể tẻ nhạt. UV cho phép bạn nhúng cấu hình này trực tiếp vào tệp script của mình bằng cách sử dụng một khối chú thích đặc biệt.
-
Khởi tạo cấu hình script: Thêm các yêu cầu về phiên bản Python.
uv init --script main.py --python 3.9.21
Thao tác này sẽ thêm khối sau vào đầu
main.py
:# /// script # requires-python = ">=3.9.21" # /// # Mã script của bạn ở dưới đây import sys print(sys.version)
Bạn có thể sử dụng các bộ chỉ định phiên bản như
>=
hoặc ghim một phiên bản chính xác bằng==
. -
Thêm các dependency vào cấu hình script: Sử dụng
uv add --script
.uv add --script main.py rich uv add --script main.py requests
Thao tác này cập nhật phần đầu của script:
# /// script # requires-python = ">=3.9.21" # dependencies = [ # "rich", # "requests" # ] # /// # Mã script của bạn ở dưới đây from rich import print import requests # ...
Bây giờ, chỉ cần chạy
uv run main.py
sẽ tự động đảm bảo phiên bản Python chính xác được sử dụng và các dependency được liệt kê có sẵn (được cài đặt/lưu vào bộ nhớ đệm nếu cần) trước khi thực thi.
Sử dụng UV cho các Dự án Python
Đối với các dự án lớn hơn, UV cung cấp khả năng quản lý dự án mạnh mẽ, thay thế việc tạo môi trường ảo thủ công và các tệp requirements.txt
.
-
Khởi tạo một dự án: Điều hướng đến thư mục dự án của bạn và chạy:
uv init
Thao tác này thiết lập một cấu trúc dự án tiêu chuẩn:
.gitignore
: Tệp bỏ qua Git tiêu chuẩn..python-version
: Chỉ định phiên bản Python của dự án (ví dụ:3.10
).main.py
: Một điểm vào mẫu.pyproject.toml
: Tệp cấu hình trung tâm cho siêu dữ liệu và các dependency (tiêu chuẩn PEP 621).README.md
: Tài liệu dự án..venv
: Một thư mục ẩn chứa môi trường ảo do UV quản lý.
Mẹo: Chạy
uv init <directory_name>
sẽ tạo các tệp này bên trong một thư mục con mới có tên<directory_name>
. -
Tệp
pyproject.toml
: Tệp này là chìa khóa. Nó có cấu trúc tốt hơnrequirements.txt
và chứa thông tin chi tiết về dự án cũng như các dependency.[project] name = "your-project-name" version = "0.1.0" description = "Add your description here." readme = "README.md" requires-python = ">=3.10" # Được định nghĩa bởi uv init license = { file = "LICENSE" } dependencies = [ # Các dependency được thêm qua 'uv add' sẽ xuất hiện ở đây ] [build-system] requires = ["hatchling"] build-backend = "hatchling.build"
-
Thêm các dependency: Sử dụng
uv add
.uv add requests uv add "fastapi[all]" # Thêm các thành phần phụ (extras)
UV giải quyết các dependency, cài đặt chúng cực kỳ nhanh chóng vào
.venv
, và cập nhật danh sáchdependencies
trongpyproject.toml
với các bộ chỉ định phiên bản phù hợp. -
Xóa các dependency: Sử dụng
uv remove
.uv remove requests
Thao tác này gỡ cài đặt gói khỏi
.venv
và xóa nó khỏipyproject.toml
. -
Tệp
uv.lock
: Khi bạn sửa đổi các dependency (uv add
,uv remove
,uv sync
), UV sẽ tạo hoặc cập nhật tệpuv.lock
. Tương tự nhưpackage-lock.json
(Node.js) hoặcpoetry.lock
(Poetry), tệp này ghi lại các phiên bản chính xác của tất cả các gói đã cài đặt, bao gồm cả các dependency gián tiếp (transitive dependencies).Quan trọng: Commit tệp
uv.lock
vào hệ thống quản lý phiên bản của bạn (ví dụ: Git). Điều này đảm bảo rằng các nhà phát triển khác hoặc hệ thống CI/CD có thể chạyuv sync
để tạo lại môi trường giống hệt, đảm bảo các bản dựng có thể tái tạo (reproducible builds). -
Đồng bộ hóa môi trường: Lệnh
uv sync
đảm bảo.venv
của bạn khớp với trạng thái được định nghĩa trongpyproject.toml
vàuv.lock
.# Cài đặt các gói từ lockfile / pyproject.toml vào .venv uv sync
UV thường chạy
sync
một cách ngầm định. Ví dụ, nếu bạn chỉnh sửa thủ côngpyproject.toml
(ví dụ: thêmpygame
) và sau đó chạyuv run main.py
, UV sẽ phát hiện thay đổi, đồng bộ hóa môi trường (cài đặtpygame
), rồi chạy script của bạn. Bạn cũng có thể chạyuv sync
thủ công sau khi kéo các thay đổi hoặc sửa đổi trực tiếppyproject.toml
. -
Khóa các dependency: Nếu bạn chỉ muốn cập nhật tệp khóa mà không nhất thiết phải cài đặt, hãy sử dụng
uv lock
.uv lock
-
Xử lý xung đột phiên bản: Đôi khi, việc thêm một gói có thể xung đột với yêu cầu phiên bản Python của bạn. Ví dụ: thử
uv add tensorflow
trong một dự án yêu cầu Python 3.13 (nếu TensorFlow chưa hỗ trợ nó) sẽ thất bại.- Điều chỉnh phiên bản Python: Chỉnh sửa
pyproject.toml
(ví dụ:requires-python = ">=3.10, <3.12"
) và tệp.python-version
(ví dụ: đặt nội dung thành3.10
). - Thử thêm lại: Chạy lại
uv add tensorflow
. UV sẽ phát hiện thay đổi Python, điều chỉnh môi trường và thử cài đặt.
- Điều chỉnh phiên bản Python: Chỉnh sửa
-
Chạy mã dự án: Sau khi các dependency được thiết lập, hãy chạy mã của bạn bằng môi trường được quản lý:
uv run main.py # Hoặc chạy các lệnh/module được cài đặt trong venv uv run python -m pytest
Kết luận
UV mang lại một bước tiến đáng kể cho các nhà phát triển Python. Bằng cách thống nhất quản lý gói, môi trường ảo và thậm chí cả cài đặt phiên bản Python vào một công cụ duy nhất, siêu tốc được xây dựng bằng Rust, nó đơn giản hóa đáng kể quy trình làm việc cho cả các script đơn giản và các dự án phức tạp. Khả năng tương thích của nó với pyproject.toml
phù hợp với các tiêu chuẩn Python hiện đại, trong khi các tính năng như đồng bộ hóa môi trường tự động và tệp khóa (lock files) giúp tăng cường khả năng tái tạo và cộng tác.
Nếu bạn đang tìm cách tăng tốc quá trình phát triển và giảm độ phức tạp của công cụ, hãy thử dùng UV. Bạn có thể sẽ thấy khó quay lại cách làm cũ!
Tài nguyên:
[1]: Trang chủ & Điểm chuẩn UV [2]: Tài liệu UV