[2014-10 TL; DR: distribute
đã chết, sử dụng pip
, mới setuptools
, và, đối với phân phối nhị phân, wheels
. bên dưới hơn.]
[câu trả lời Original]
Distribute là là một ngã ba của già setuptools nên gần như tất cả ý kiến mà theo áp dụng chung cho Distribute và setuptools. Setuptools là một nỗ lực để điền vào một số lỗ trong gói thư viện chuẩn cũ hơn của Python, Distutils. Các chức năng được thêm vào của Setuptools như tải xuống tự động các gói thông qua giao diện dòng lệnh, easy_install
và một số cấp quản lý phụ thuộc. Tuy nhiên, một phân đoạn của cộng đồng Python có ý kiến rằng các công cụ thiết lập quá xâm nhập và có quá nhiều phép thuật hậu trường cho một số tính năng của nó.
pip
là giao diện cấp cao hơn trên các công cụ thiết lập hoặc Phân phối. Nó sử dụng chúng để thực hiện nhiều chức năng của nó nhưng tránh một số tính năng gây tranh cãi của chúng, như trứng nén. pip
cũng cung cấp các tính năng không có sẵn trong setuptools
, như lệnh gỡ cài đặt và khả năng xác định các bộ yêu cầu cố định và tái tạo đáng tin cậy một bộ gói. Có một so sánh tính năng hoàn chỉnh hơn here.
Tại sao có quá nhiều thành phần (và có nhiều thành phần hơn, chẳng hạn như buildout
)? Rất nhiều lý do: giải pháp phải hoạt động trên tất cả các nền tảng chính mà Python được hỗ trợ (tức là Unix-y, Windows, Mac OS X), do đó, việc xây dựng và cài đặt trình bày một tập hợp các sự cố phức tạp ; giống như nhiều dự án mã nguồn mở, Python cơ bản là tất cả tình nguyện viên và nhiều nhà phát triển không phải tất cả đều quan tâm đến các vấn đề về đóng gói và cài đặt; có một sự bảo thủ tự nhiên về việc thêm các tính năng mới chưa được chứng minh chính vào thư viện chuẩn; sự khác biệt về ý kiến, v.v.
Hiện tại, có một dự án đang được tiến hành để cung cấp thay thế cho Distutils và có thể cho một số tiện ích bổ sung cấp cao hơn. Nó được lên kế hoạch để được phát hành trong thư viện chuẩn Python 3.3 là gói packaging
và là một phần bổ trợ cho các phiên bản cũ của Python là Distutils2
.
Nói tóm lại, mối quan hệ hiện nay là:
pip -> [ setuptools | Distribute ] -> Distutils -> Python core
|
3rd party packages | included in Python
|
UPDATE (2012-07): Trước khi tính năng đang cắt cho Python 3.3, nó đã quyết định rằng packaging
là không hoàn toàn sẵn sàng chưa để phát hành trong thư viện chuẩn nên nó đã bị xóa khỏi bản phát hành 3.3. Công việc sẽ tiếp tục trên Distutils2
có sẵn thông qua PyPI và trên những gì sẽ được bao gồm trong thư viện chuẩn cho Python 3.4.
UPDATE (2014-10): Đã có những thay đổi hơn nữa trong thế giới của Python bao bì từ câu trả lời này là cập nhật lần cuối.
Quan trọng nhất, kể từ giữa năm 2013, sự rạn nứt giữa setuptools
và distribute
đã được chữa lành và hoạt động phát triển has been merged into a new setuptools
project. distribute
hiện tại là không còn được dùng nữa và không còn được duy trì; sử dụng mới setuptools
thay vì nhưng không sử dụng easy_install
làm trình cài đặt của nó.
pip
đã trở thành công cụ cài đặt de-facto và may mắn (cho Python gói không có quy định khác do quản lý gói của nền tảng của bạn) hoặc trong hoặc bên ngoài của môi trường ảo (virtualenv
hoặc pyvenv
).
Thay vì cũ setuptools
bdist eggs
, wheels
có trở thành định dạng phân phối nhị phân may mắn cho gói Python.
As of Python 3.4, a version of pip
với wheel
hỗ trợ hiện đang vận chuyển với các python.org
cài đặt nhị phân chính thức và gói nguồn và người ta dự đoán rằng pip
cũng sẽ bao gồm trong next maintenance release of Python 2.7 (2.7.9).
Distutils2
và packaging
hiện không hoạt động.
Chi tiết khác trong tài liệu Python 3 mới và Python Packaging User Guide mới.
Related: http://stackoverflow.com/questions/6344076/differences-between-distribute-distutils-setuptools-and-distutils2 – guettli