30 điểm bởi darjeeling 2025-07-07 | 4 bình luận | Chia sẻ qua WhatsApp

Tóm tắt video "uv: Making Python Local Workflows FAST and BORING in 2025"

Video này là phần thứ hai về cách sử dụng công cụ đóng gói Python uv để làm cho quy trình phát triển cục bộ nhanh hơn và hiệu quả hơn. Các ý chính như sau.

1. Tận dụng các lệnh cốt lõi của uv
  • uv run: Chạy các lệnh như pytest hoặc fastapi trong môi trường ảo bằng các dependency được định nghĩa trong pyproject.toml và khóa trong tệp uv.lock.
  • uv add: Thêm dependency mới vào pyproject.toml và tự động cập nhật tệp uv.lock.
  • uv run --with: Cho phép tạm thời đưa vào các module hỗ trợ phát triển như pdbpp mà không cần thêm vào dependency cốt lõi của dự án.
  • uv lock --upgrade: Cập nhật tệp khóa dependency với tốc độ rất nhanh. uv run sẽ tự động phát hiện tệp khóa đã thay đổi khi chạy và đồng bộ môi trường.
2. Chuẩn hóa workflow bằng just
  • uv không có sẵn tính năng định nghĩa lệnh tùy chỉnh như hatch hay pdm.
  • Video chỉ ra các nhược điểm của Makefile như phụ thuộc nền tảng, cú pháp không tiêu chuẩn, v.v., và mạnh mẽ đề xuất just — công cụ chạy lệnh được viết bằng Rust — như một giải pháp thay thế.
  • Dùng justfile để chuẩn hóa các tác vụ lặp lại thành các recipe như sau.
    • test: Chạy kiểm thử (có thể truyền tham số)
    • cov: Kiểm tra độ bao phủ kiểm thử
    • serve: Chạy máy chủ phát triển
    • checkall: Chạy toàn bộ các bước kiểm tra như lint, type check, v.v. cùng một lúc
3. Tích hợp just với uv
  • Tệp .env: just có thể đọc tệp .env để thiết lập biến môi trường. Nhờ đó có thể xây dựng workflow linh hoạt, chẳng hạn thêm động tham số --with cho uv run hoặc thay đổi cổng máy chủ.
  • uvx (uv tool run): Đây là lệnh chạy các gói PyPI độc lập với dự án, tương tự pipx. Bên trong recipe của just, có thể dùng các công cụ như httpie mà không cần thêm chúng vào dependency của dự án.
4. Quản lý trực tiếp môi trường ảo (workflow tùy chọn)
  • Đây là cách dành cho các nhà phát triển muốn dùng phương pháp truyền thống, tức kích hoạt môi trường ảo (.venv) trực tiếp thay vì thông qua uv run.
  • uv sync: Đồng bộ trạng thái giữa tệp uv.lock và thư mục .venv. (cài dependency và loại bỏ các gói không cần thiết)
  • direnv: Công cụ shell tự động chạy script .envrc khi đi vào một thư mục cụ thể. Có thể tận dụng điều này để tự động chạy uv sync và kích hoạt môi trường ảo khi vào thư mục.
Kết luận

Khi kết hợp tốc độ của uv với các công cụ như justdirenv, bạn có thể tự động hóa và chuẩn hóa việc quản lý dependency cũng như thực thi lệnh, từ đó xây dựng một môi trường phát triển "nhanh và nhàm chán (boring)" — tức cực kỳ ổn định và dễ dự đoán — giúp nhà phát triển tập trung hơn vào logic cốt lõi.

4 bình luận

 
gracefullight 2025-07-10

Tôi đã tạo sẵn một template để dùng với https://github.com/gracefullight/py-starter.

 
aabb2467 2025-07-08

Nếu dùng poethepoet thì có thể định nghĩa và sử dụng các tác vụ ngay trong pyproject.toml, nên tôi dùng nó thay cho just.

 
gracefullight 2025-07-10

Cảm ơn.