Cộng đồng Python đang trải qua một sự thay đổi đáng kể khi UV , một trình quản lý gói mới được viết bằng Rust , đang được áp dụng rộng rãi. Trong khi người dùng báo cáo về những cải thiện hiệu suất đáng kể và độ tin cậy được nâng cao, công cụ này đã châm ngòi cho một cuộc tranh luận gay gắt về việc liệu các công cụ Python có nên được xây dựng bằng các ngôn ngữ khác ngoài chính Python hay không.
Lợi ích hiệu suất thúc đẩy việc áp dụng ban đầu
UV mang lại những cải thiện tốc độ đáng kể so với các công cụ quản lý gói Python truyền thống. Người dùng liên tục báo cáo thời gian cài đặt giảm từ vài phút xuống còn vài giây, với một số trường hợp trải nghiệm cải thiện hiệu suất gần 10 lần trong việc build Docker . Công cụ này kết hợp quản lý gói, xử lý môi trường ảo và quản lý phiên bản Python thành một tệp nhị phân duy nhất, loại bỏ nhiều vấn đề phức tạp đã làm khổ quy trình phát triển Python trong nhiều năm.
Ngoài tốc độ thô, UV còn giới thiệu khả năng giải quyết phụ thuộc tốt hơn và quản lý tệp khóa. Công cụ này tự động tạo ra các tệp khóa toàn diện, ngăn chặn các vấn đề phổ biến khi các nhà phát triển khác nhau kết thúc với các phiên bản gói khác nhau. Tính dự đoán này đã chứng minh đặc biệt có giá trị trong các môi trường container hóa nơi các bản build có thể tái tạo là quan trọng.
So sánh hiệu suất (Thời gian cài đặt Docker)
- pip (requirements.txt): 8.1 giây
- poetry: 3.7 giây
- uv: 2.1 giây
- Cải thiện được báo cáo: Nhanh hơn tới 10 lần trong một số tình huống
Tranh cãi về Rust chia rẽ các nhà phát triển
Quyết định xây dựng UV bằng Rust thay vì Python đã tạo ra sự chia rẽ đầy đam mê trong cộng đồng. Những người chỉ trích cho rằng các công cụ Python nên vẫn có thể tiếp cận được với các nhà phát triển Python , chỉ ra những thách thức bảo trì khi các công cụ hệ sinh thái cốt lõi yêu cầu kiến thức về các ngôn ngữ lập trình bổ sung. Họ lo lắng về những tình huống khi các lỗi quan trọng hoặc vấn đề tương thích yêu cầu chuyên môn Rust mà các nhà phát triển Python thông thường thiếu.
Tôi hoàn toàn phản đối việc các công cụ Python được viết bằng ngôn ngữ khác ngoài Python . Tôi hiểu rằng các extension C tồn tại và phần lớn Python đồng nghĩa với CPython . Tôi nghĩ 2 ngôn ngữ là đủ, chúng ta không cần ngôn ngữ thứ 3 mà không ai yêu cầu.
Những người ủng hộ phản bác rằng lợi ích hiệu suất và việc loại bỏ các vấn đề bootstrapping biện minh cho việc lựa chọn ngôn ngữ. Họ lập luận rằng việc có các công cụ quản lý gói độc lập với chính Python giải quyết các vấn đề gà và trứng cơ bản đã lâu làm phức tạp việc thiết lập môi trường Python .
Tính năng chính của UV
- Được viết bằng Rust để tối ưu hiệu suất
- Kết hợp quản lý gói, môi trường ảo và quản lý phiên bản Python
- Tự động tạo lock file với cây phụ thuộc
- Bảo mật tốt hơn với xác minh hash
- Giảm thiểu việc thực thi mã tùy ý trong quá trình cài đặt
- Phân phối dưới dạng tệp nhị phân đơn lẻ (không phụ thuộc vào Python )
Các mối quan ngại về bảo mật và độ tin cậy nổi lên
Cuộc thảo luận cộng đồng cũng đã làm nổi bật những cân nhắc bảo mật quan trọng. UV giải quyết một số lỗ hổng có trong quy trình pip truyền thống, bao gồm xác minh hash tốt hơn và giảm việc thực thi mã tùy ý trong quá trình cài đặt gói. Tuy nhiên, một số nhà phát triển bày tỏ lo ngại về các thực hành xử lý tệp khóa, đặc biệt là việc tái tạo tự động các tệp khóa trong môi trường sản xuất.
Cuộc tranh luận mở rộng đến các thực hành triển khai, với các nhà phát triển có kinh nghiệm cảnh báo về các script tự động tạo ra các tệp khóa bị thiếu. Việc tự động hóa như vậy có thể che giấu các vấn đề cấu hình nghiêm trọng và có khả năng đưa ra các lỗ hổng bảo mật trong hệ thống sản xuất.
Lệnh Tích hợp Docker
Cài đặt UV
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
Biến Môi trường
ENV UV_COMPILE_BYTECODE=1
ENV UV_PROJECT_ENVIRONMENT=/path/to/project
Cài đặt Phụ thuộc
uv sync --frozen --no-install-project
Lo ngại về sự phân mảnh hệ sinh thái
Có lẽ mối quan ngại đáng kể nhất được nêu ra là mô hình rộng hơn của sự phân mảnh hệ sinh thái. Quản lý gói Python đã thấy nhiều giải pháp cạnh tranh qua các năm, từ pip đến poetry đến pipenv , và bây giờ là UV . Một số nhà phát triển lo lắng rằng việc áp dụng một công cụ khác nữa tiếp tục một chu kỳ bất ổn thay vì giải quyết các vấn đề cơ bản.
Tuy nhiên, việc áp dụng nhanh chóng của UV cho thấy nó có thể khác biệt. Cách tiếp cận toàn diện của công cụ, giải quyết đồng thời nhiều điểm đau, đã thuyết phục nhiều nhà phát triển hợp nhất chuỗi công cụ của họ xung quanh một giải pháp duy nhất. Các dự án lớn đã chuyển đổi, và lợi ích hiệu suất trong môi trường tích hợp liên tục cung cấp lý do kinh doanh thuyết phục cho việc áp dụng.
Cuộc tranh luận đang diễn ra phản ánh những câu hỏi sâu sắc hơn về quản trị hệ sinh thái ngôn ngữ và sự cân bằng giữa đổi mới và ổn định. Khi UV tiếp tục thu hút sự chú ý, thành công hoặc thất bại của nó có thể ảnh hưởng đến cách các quyết định công cụ Python trong tương lai được đưa ra và liệu cộng đồng có thể tập hợp xung quanh các giải pháp thống nhất hay không.
Tham khảo: Switching pip to uv in a Dockerized Flask / Django App