Python có một lịch sử khó hiểu của công cụ có thể được sử dụng để đóng gói và mô tả dự án: bao gồm distutilstrong thư viện chuẩn, distribute, distutils2, và setuptools(và có thể nhiều hơn). Có vẻ như distributevà distutils2đã ngừng cung cấp setuptools, mà để lại hai tiêu chuẩn cạnh tranh.
Theo hiểu biết của tôi setuptoolscung cấp nhiều tùy chọn hơn (ví dụ: khai báo các phụ thuộc, kiểm tra, v.v.) so với distutils, tuy nhiên nó không được bao gồm trong thư viện chuẩn Python (chưa?).
Các Python Bao bì Hướng dẫn mua [ 1 ] khuyến cáo hiện nay:
Sử dụng
setuptoolsđể xác định dự án và tạo Phân phối nguồn.
Và giải thích:
Mặc dù bạn có thể sử dụng thuần túy
distutilscho nhiều dự án, nhưng nó không hỗ trợ xác định các phụ thuộc vào các dự án khác và thiếu một số tiện ích tiện lợi để tự động điền siêu dữ liệu gói chính xác được cung cấp bởisetuptools. Nằm ngoài thư viện tiêu chuẩn, setuptools cũng cung cấp một tính năng phù hợp hơn được thiết lập trên các phiên bản Python khác nhau và (không giống nhưdistutils),setuptoolssẽ được cập nhật để tạo ra các định dạng chuẩn của Met Metadata 2.0 sắp tới trên tất cả các phiên bản được hỗ trợ.Ngay cả đối với các dự án chọn sử dụng
distutils, khi pip cài đặt các dự án đó trực tiếp từ nguồn (thay vì cài đặt từ tệp bánh xe dựng sẵn), nó sẽ thực sự xây dựng dự án của bạn bằng cách sử dụngsetuptoolsthay thế.
Tuy nhiên, xem xét các tập tin setup.py của các dự án khác nhau cho thấy rằng điều này dường như không phải là một tiêu chuẩn thực tế. Nhiều gói vẫn sử dụng distutilsvà các gói hỗ trợ setuptoolsthường trộn setuptoolsvới distutilsví dụ: bằng cách nhập dự phòng:
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
Tiếp theo là một nỗ lực để tìm cách viết một thiết lập có thể được cài đặt bởi cả hai setuptoolsvà distutils. Điều này thường bao gồm nhiều cách kiểm tra phụ thuộc dễ bị lỗi khác nhau, vì distutilskhông hỗ trợ các phụ thuộc trong chức năng thiết lập.
Tại sao mọi người vẫn nỗ lực thêm để hỗ trợ distutils- thực tế setuptoolslà không có trong thư viện tiêu chuẩn là lý do duy nhất? Những lợi thế của distutilsvà có bất kỳ nhược điểm nào của việc viết các tập tin setup.py chỉ hỗ trợ setuptools.
setuptoolslà một giải pháp thay thế nâng cao cho distutilsnhưng lưu ý rằng " Trình cài đặt pip được đề xuất chạy tất cả các tập lệnh setup.py với setuptools, ngay cả khi chính tập lệnh chỉ nhậpdistutils " ( nguồn )
distutilsđã được hợp nhất trở lạisetuptools, nhưng có những ứng dụng cũ được viết để sử dụngdistutilsvà có những chi phí liên quan để di chuyển theo đúng tiêu chuẩn.