Python UV: Giải pháp quản lý môi trường Python nhanh chóng và tiện lợi

Python uv là gì? Cách sử dụng nó như thế nào?
Please wait 0 seconds...
Scroll Down and click on Go to Link for destination
Congrats! Link is Generated
Python UV: Giải pháp quản lý môi trường Python nhanh chóng và tiện lợi
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ặc pip.
  • 🖥️ 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ới sh:
    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ụng wget:
    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ới iex:
    powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
    Lưu ý: Thay đổi chính sách thực thi cho phép chạy một tập lệnh từ Internet.
  • 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ới pipx:
    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é

  1. 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

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 runcó 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 buildcó 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é.

Đăng nhận xét

Tham gia cuộc trò chuyện