Python UV: Giải pháp quản lý môi trường Python nhanh chóng và tiện lợi |
Dạo gần đây, khi tớ đang dạo quanh các website công nghệ, tự nhiên đập vào mắt mình dòng chữ "Python uv". uv
là gì vậy???
Nghe khá là lạ nhỉ, tớ làm việc với Python cũng được gần 5 năm, nhưng chưa từng nghe đến nó. Trí tò mò của tớ nổi lên, và thế là chúng ta có bài viết này =))
Theo tớ tìm hiểu được, uv được phát triển bởi Charlie Marsh, chuyên cung cấp các giải pháp "High-performance developer tools for the Python ecosystem", nôm na là Charlie Marsh không hài lòng với hiệu suất của các công cụ sẵn có của Python, vậy nên họ đã quyết tâm tạo ra những công cụ mới với mong muốn tối đa hiệu suất. Với mong muốn đó, ngày 2024-02-16, phiên bản đầu tiên của uv 0.0.5 được ra đời.
Table of Contents
Giới thiệu về uv
uvđược giới thiệu là một công cụ quản lý package và môi trường Python siêu tốc, được viết bằng ngôn ngữ Rust.
uv ra đời với kì vọng có thể thay thế được các công cụ như: pip
, pip-tools
, pipx
, poetry
, pyenv
,
twine
, virtualenv
, và nhiều hơn nữa
Phiên bản mới nhất của uv ở hiện tại là uv 0.5.5
(2024-11-28) có những điểm nổi bật như sau:
- ⚡️ Nhanh hơn
pip
từ 10-100 lần. - 🐍 Cài đặt và quản lý các phiên bản Python.
- 🛠️ Chạy và cài đặt các ứng dụng Python.
- ❇️ Chạy các script, hỗ trợ siêu dữ liệu phụ thuộc trực tiếp.
- 🗂️ Cung cấp quản lý dự án toàn diện, với một lockfile phổ quát.
- 🔩 Bao gồm giao diện tương thích pip để tăng tốc độ với CLI quen thuộc.
- 🏢 Hỗ trợ không gian làm việc kiểu Cargo cho các dự án có thể mở rộng.
- 💾 Hiệu quả về dung lượng đĩa, với bộ nhớ cache toàn cục để loại bỏ các phụ thuộc trùng lặp.
- ⏬ Có thể cài đặt mà không cần Rust hay Python thông qua
curl
hoặcpip
. - 🖥️ Hỗ trợ macOS, Linux và Windows.
Nhưng tại sao uv lại nhanh như vậy?
Bí quyết của điều này nằm ở uv được viết bằng Rust, một ngôn ngữ có hiệu năng cực cao. So với Python, Rust có những ưu điểm sau:
- Xử Lý Song Song: Có thể thực hiện nhiều tác vụ cùng lúc
- Quản Lý Bộ Nhớ Hiệu Quả: Giảm thiểu overhead
- Biên Dịch Trực Tiếp: Không cần thông dịch như Python
Ví dụ: Khi cài numpy, pip có thể mất 2-3 phút, còn UV chỉ mất chưa đến 10 giây!
Hướng dẫn sử dụng uv
uv
có rất nhiều chức năng, và tài liệu của uv cũng khá đầy đủ, tuy nhiên với những dự án thông thường, chúng ta sẽ chỉ cần sử dụng những tính năng phổ biến.
Sau đây, mình sẽ hướng dẫn mọi người cách mà mình thường dùng với uv nhé.
Cài đặt uv
Trình cài đặt độc lập
- Sử dụng
curl
để tải xuống tập lệnh và thực thi nó vớish
:curl -LsSf https://astral.sh/uv/install.sh | sh
- Nếu hệ thống của bạn không có
curl
, bạn có thể sử dụngwget
:wget -qO- https://astral.sh/uv/install.sh | sh
- Nếu bạn muốn tải xuống một phiên bản cụ thể, hãy đưa nó vào url:
curl -LsSf https://astral.sh/uv/0.5.5/install.sh | sh
- Sử dụng
irm
để tải xuống tập lệnh và thực thi nó vớiiex
:
Lưu ý: Thay đổi chính sách thực thi cho phép chạy một tập lệnh từ Internet.powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
- Nếu bạn muốn tải xuống một phiên bản cụ thể, hãy đưa nó vào url:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/0.5.5/install.ps1 | iex"
Cài đặt với PyPI
uv
nên được cài đặt vào một môi trường riêng biệt. Ví dụ vớipipx
:pipx install uv
- Tuy nhiên, bạn cũng có thể cài đặt với
pip
như sau:pip install uv
Homebrew
uv
có sẵn trong các gói Homebrew cốt lõi.
brew install uv
Cập nhật uv
uv
nếu được cài dặt thông qua trình cài đặt độc lập, thì nó có thể tự cập nhật theo yêu cầu như sau:uv self update
- Khi sử dụng phương pháp cài đặt khác, tự cập nhật sẽ bị vô hiệu hóa. Thay vào đó, hãy sử dụng phương pháp nâng cấp của trình quản lý gói. Ví dụ, với
pip
:pip install --upgrade uv
Khởi tạo dự án
Để tạo dự án mới, bạn hãy sử dụng uv init
command
uv init hello-world
cd hello-world
Hoặc nếu như dự án đã tồn tại và bạn muốn sử dụng uv cho nó, bạn có thể chạy các command sau:
cd your-project
uv init
Cài đặt môi trường ảo
Chúng sẽ thực hiện tạo môi trường ảo cho dự án trên nhé. Để trực quan hơn, mình sẽ sử dụng Python 3.12
để làm ví dụ nhé
- Cài đặt
Python
uv python install 3.12
-
- Có 2 cách để tạo môi trường ảo như sau:
- Ghim dự án hiện tại để sử dụng phiên bản Python cụ thể. Sau đó tạo môi trường ảo
uv python pin 3.12 uv venv
- Hoặc bạn có thể môi trường ảo từ một phiên bản Python cụ thể
uv venv --python 3.12
- Ghim dự án hiện tại để sử dụng phiên bản Python cụ thể. Sau đó tạo môi trường ảo
Khi đó, cấu trúc thư mục của dự án sẽ có dạng như sau:
.
├── .venv
│ ├── bin
│ ├── lib
│ └── pyvenv.cfg
├── .python-version
├── README.md
├── hello.py
├── pyproject.toml
└── uv.lock
Từ đó, chúng ta có thể phát triển thêm các tập lệnh mà mình cầ
Chạy dự án
uv run
có thể được sử dụng để chạy các tập lệnh hoặc lệnh tùy ý trong môi trường dự án của bạn.
Ví dụ đối với flask
uv add flask
uv run -- flask run -p 3000
Sử dụng công cụ ruff
Ruff
là một trình kiểm tra lỗi và định dạng mã Python cực nhanh, được viết bằng Rust. Chúng ta có thể sử dụng nó mà không cần phải cài đặt
- Chạy ruff với uv:
uv tool run ruff check
- Hoặc bạn có thể sử dụng alias
uvx
:uvx ruff check
Xây dựng và công khai bản phân phối
uv build
có thể được sử dụng để xây dựng các bản phân phối nguồn và bản phân phối nhị phân (wheel) cho dự án của bạn.
uv build
Sau đó, bạn có thể thực hiện công khai nó lên PyPi
uv publish
Sau khi công khai, bạn có thể kiểm tra nó với một command đơn giản sau:
uv run --with <PACKAGE> --no-project -- python -c "import <PACKAGE>"
Lời Kết
Theo mình, UV không chỉ là một công cụ, mà còn là một cuộc cách mạng trong việc quản lý môi trường Python. Nó mở ra một hướng tiếp cận mới cho các lập trình viên, đồng thời cũng thúc đẩy các nghiên cứu sâu hơn về việc tối cải thiện hiệu năng cho Python.
Vì vậy các bạn nên tự mình trải nghiệm nó, và đừng ngại chia sẻ cảm nhận của mình xuống dưới bình luận nhé.