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 distutils
trong thư viện chuẩn, distribute
, distutils2
, và setuptools
(và có thể nhiều hơn). Có vẻ như distribute
và 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 setuptools
cung 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
distutils
cho 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
),setuptools
sẽ đượ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ụngsetuptools
thay 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 distutils
và các gói hỗ trợ setuptools
thường trộn setuptools
với distutils
ví 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 setuptools
và 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ì distutils
khô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ế setuptools
là không có trong thư viện tiêu chuẩn là lý do duy nhất? Những lợi thế của distutils
và 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
.
setuptools
là một giải pháp thay thế nâng cao cho distutils
như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ụngdistutils
và có những chi phí liên quan để di chuyển theo đúng tiêu chuẩn.