7 điểm bởi GN⁺ 2024-02-16 | 3 bình luận | Chia sẻ qua WhatsApp
  • uv là trình cài đặt và bộ phân giải gói Python siêu nhanh được viết bằng Rust, được thiết kế để thay thế quy trình làm việc của pippip-tools
  • uv là một cột mốc hướng tới "Cargo for Python", một trình quản lý dự án và gói Python toàn diện, nhanh, đáng tin cậy và dễ sử dụng
  • Có kế hoạch tiếp quản việc quản lý Rye, công cụ đóng gói Python do Armin Ronacher phát triển mang tính thử nghiệm, và mở rộng uv thành dự án kế nhiệm hợp nhất

Tập trung ám ảnh vào hiệu năng

  • uv nhanh hơn 8-10 lần so với pippip-tools khi không có bộ nhớ đệm, và nhanh hơn 80-115 lần khi có cache.
  • Sử dụng bộ nhớ đệm mô-đun toàn cục để không phải tải lại hoặc build lại các phụ thuộc, đồng thời tận dụng Copy-on-Write và hard link trên các hệ thống tệp được hỗ trợ để giảm thiểu dung lượng đĩa sử dụng.

Tối ưu cho việc áp dụng

  • Bản phát hành đầu tiên của uv hỗ trợ API của pippip-tools, nên có thể dùng trong các dự án hiện có mà không cần thay đổi cấu hình.
  • uv được cung cấp dưới dạng một binary tĩnh duy nhất và có thể thay thế pip, pip-tools, virtualenv.
  • Có thể cài đặt tách biệt với chính Python mà không cần quản lý việc cài pip theo từng phiên bản Python.

"Cargo for Python": uv và Rye

  • uv là một cột mốc trung gian hướng tới một trình quản lý gói và dự án Python hợp nhất, nhanh, đáng tin cậy và dễ sử dụng.
  • uv hướng tới một binary duy nhất bao gồm không chỉ pip, pip-tools, virtualenv mà còn cả pipx, tox, poetry, pyenv, ruff và nhiều công cụ khác.
Quảng cáo

API tương thích

  • Có thể dùng uv pip install thay cho pip install để cài các phụ thuộc Python từ dòng lệnh, tệp requirements hoặc pyproject.toml.
  • Có thể dùng uv pip compile thay cho pip-compile để tạo requirements.txt đã khóa.
  • Có thể dùng uv pip sync thay cho pip-sync để đồng bộ requirements.txt đã khóa với môi trường ảo.

Lộ trình

  • Sau bản phát hành này, kế hoạch là ưu tiên hỗ trợ người dùng và tập trung cải thiện khả năng tương thích, hiệu năng và độ ổn định.
  • Sau đó, mục tiêu là mở rộng uv thành một trình quản lý dự án và gói Python hoàn chỉnh.

Lời cảm ơn

  • Gửi lời cảm ơn tới tất cả những người đã đóng góp trực tiếp hoặc gián tiếp cho việc phát triển uv.
  • Đặc biệt cảm ơn Jacob Finkelman và Matthieu Pizenberg, những người có PubGrub được sử dụng trong uv như bộ phân giải phiên bản cốt lõi.

Ý kiến của GN⁺

  • uv là một công cụ đột phá có thể mang lại hiệu năng vượt trội hơn nhiều so với công cụ pip hiện có cho các nhà phát triển Python, từ đó rút ngắn đáng kể thời gian thiết lập dự án.
  • Việc được viết bằng Rust phản ánh một xu hướng mới trong hệ sinh thái Python, coi trọng hiệu năng và độ ổn định, và được kỳ vọng sẽ cải thiện mạnh mẽ trải nghiệm của nhà phát triển.
  • Sự phát triển của uv hướng tới việc hợp nhất các công cụ quản lý gói và dự án Python, điều này sẽ giúp các nhà phát triển làm việc hiệu quả và nhất quán hơn.

3 bình luận

 
kyunghoon 2024-10-29

Tốc độ thực sự cực kỳ ấn tượng;;

 
ajh508 2024-02-17

Hy vọng nó sẽ được mở rộng để có thể thay thế conda.

 
GN⁺ 2024-02-16
Ý kiến Hacker News
  • Hoài nghi về một pip-and-more được VC hậu thuẫn

    • Khó hiểu một pip-and-more được vốn đầu tư mạo hiểm hỗ trợ sẽ kiếm lợi nhuận thế nào khi chiếc máy in tiền miễn phí bị hỏng.
  • Câu hỏi về việc uv không hỗ trợ tạo lockfile độc lập nền tảng

    • Có ý kiến cho rằng việc uv, không giống Poetry hay PDM, không tạo lockfile độc lập nền tảng cho thấy cách tiếp cận này đang phụ thuộc vào file requirements, và điều đó không phù hợp với mục tiêu trở thành “Cargo của Python”.
  • Đánh giá tích cực về việc uv hỗ trợ chiến lược giải quyết phụ thuộc thay thế

    • uv mặc định tuân theo chiến lược giải quyết phụ thuộc Python tiêu chuẩn, ưu tiên các phiên bản gói mới nhất còn tương thích, nhưng cũng cung cấp khả năng kiểm thử với phiên bản tương thích thấp nhất thông qua tùy chọn --resolution=lowest.
    • Việc uv có thể tạo phương án giải quyết cho một phiên bản Python khác với phiên bản hiện đang cài đặt thông qua tham số --python-version được đánh giá là rất tuyệt.
  • Thắc mắc về sự phức tạp của hệ thống gói Python

    • Có ý kiến đặt câu hỏi rằng triết lý của Python có nguyên tắc “nên có một cách rõ ràng để làm việc đó”, vậy tại sao câu chuyện packaging lại trở nên phức tạp đến thế.
  • Điểm thú vị khi uv sử dụng pubgrub-rs

    • Việc uv dùng pubgrub-rs, bản hiện thực bằng Rust của thuật toán giải phiên bản pubgrub vốn ban đầu được viết cho ngôn ngữ Dart, được xem là một chuỗi cảm hứng xuyên ngôn ngữ khá thú vị.
  • Nhắc đến dự đoán về lộ trình của đội ngũ Astral

    • Có người nhắc rằng họ đã dự đoán từ 11 ngày trước rằng đội ngũ Astral sẽ mở rộng chức năng của ruff để nó có thể làm mọi thứ mà lập trình viên Python cần.
  • Trải nghiệm cá nhân về tốc độ của pip

    • Có trải nghiệm cho thấy pip nhìn chung chạy nhanh, nhưng sẽ chậm khi phải tải nhiều dữ liệu hoặc khi mất thời gian biên dịch các thư viện native. Trong khi đó, conda thì rất chậm, kể cả trên máy mạnh.
  • Quan điểm hoài nghi về một trình quản lý gói Python mới

    • Lại có thêm một trình quản lý gói Python khác, nhưng nếu nó thực sự có thể thay thế pip thì người dùng sẵn sàng chuyển sang như đã từng chuyển sang ruff để cải thiện tốc độ. Điều cần thiết là một giải pháp lâu dài cho việc quản lý gói của Python.
  • Thắc mắc về quyết định để uv tạo file requirements.txt theo từng nền tảng

    • Có người muốn biết lý do vì sao uv lại chọn tạo requirements.txt đặc thù theo nền tảng thay vì tạo các file poetry.lockpdm.lock không phụ thuộc nền tảng.
  • Chúc mừng và phản hồi tích cực về công việc của đội ngũ Astral

    • Dù từng bày tỏ lo ngại về một nỗ lực từ bên ngoài nhằm “sửa” Python packaging, người này vẫn vui khi thấy khả năng tương thích được đặt lên hàng đầu. Họ đánh giá tích cực việc đội ngũ Astral đã nỗ lực nhấn mạnh tính tương thích với các công cụ và tiêu chuẩn hiện có.
  • Câu hỏi về vấn đề biên dịch của các gói pip

    • Có câu hỏi về việc một số gói pip yêu cầu biên dịch phụ thuộc vào cả một toolchain như gcc, g++, gtk, Qt..., và họ định làm thế nào để việc này ít lỗi hơn và thân thiện với người dùng hơn.