Kể từ tháng 3 năm 2020, hầu hết các câu trả lời khác cho câu hỏi này đã hết hạn vài năm. Khi bạn gặp lời khuyên về các vấn đề về bao bì Python, hãy nhớ xem ngày xuất bản và không tin vào thông tin lỗi thời.
Các Python Bao bì Hướng dẫn mua là đáng đọc. Mỗi trang đều có ngày "cập nhật lần cuối" được hiển thị, do đó bạn có thể kiểm tra mức độ truy cập của hướng dẫn và nó khá toàn diện. Thực tế là nó được lưu trữ trên một tên miền phụ của python.org của Python Software Foundation chỉ làm tăng thêm uy tín cho nó. Các dự án Tóm tắt trang đặc biệt liên quan ở đây.
Tóm tắt các công cụ:
Dưới đây là tóm tắt về cảnh quan bao bì Python:
Các công cụ được hỗ trợ:
distutils
vẫn là công cụ tiêu chuẩn để đóng gói trong Python. Nó được bao gồm trong thư viện tiêu chuẩn (Python 2 và Python 3). Nó rất hữu ích cho các bản phân phối Python đơn giản, nhưng thiếu các tính năng. Nó giới thiệu distutils
gói Python có thể được nhập trong setup.py
tập lệnh của bạn .
setuptools
được phát triển để khắc phục những hạn chế của Distutils và không được bao gồm trong thư viện tiêu chuẩn. Nó giới thiệu một tiện ích dòng lệnh được gọi là easy_install
. Nó cũng giới thiệu setuptools
gói Python có thể được nhập trong setup.py
tập lệnh của bạn và pkg_resources
gói Python có thể được nhập trong mã của bạn để xác định vị trí các tệp dữ liệu được cài đặt với một bản phân phối. Một trong những vấn đề của nó là nó vá các distutils
gói Python. Nó nên hoạt động tốt với pip
. Nó thấy phát hành thường xuyên.
scikit-build
là một trình tạo hệ thống xây dựng cải tiến sử dụng nội bộ CMake để xây dựng các phần mở rộng Python đã biên dịch. Bởi vì scikit-build không dựa trên distutils, nên nó không thực sự có bất kỳ giới hạn nào. Khi ninja-build có mặt, scikit-build có thể biên dịch các dự án lớn nhanh hơn ba lần so với các giải pháp thay thế. Nó nên hoạt động tốt với pip
.
distlib
là một thư viện cung cấp chức năng được sử dụng bởi các công cụ cấp cao hơn như pip
.
packaging
cũng là một thư viện cung cấp chức năng được sử dụng bởi các công cụ cấp cao hơn như pip
vàsetuptools
Các công cụ không dùng nữa / bị bỏ rơi:
distribute
là một ngã ba của setuptools
. Nó đã chia sẻ cùng một không gian tên, vì vậy nếu bạn đã cài đặt Phân phối, import setuptools
thực tế sẽ nhập gói được phân phối với Phân phối. Phân phối đã được hợp nhất trở lại vào Setuptools 0.7 , vì vậy bạn không cần phải sử dụng Phân phối nữa. Trên thực tế, phiên bản trên Pypi chỉ là một lớp tương thích để cài đặt Setuptools.
distutils2
là một nỗ lực để có sản phẩm tốt nhất của distutils
, setuptools
và distribute
và trở thành công cụ tiêu chuẩn bao gồm trong thư viện chuẩn của Python. Ý tưởng là nó distutils2
sẽ được phân phối cho các phiên bản Python cũ và distutils2
sẽ được đổi tên thành packaging
Python 3.3, bao gồm nó trong thư viện tiêu chuẩn của nó. Các kế hoạch này đã không đi như dự định, tuy nhiên, và hiện tại, distutils2
là một dự án bị bỏ hoang . Bản phát hành mới nhất là vào tháng 3 năm 2012 và trang chủ Pypi của nó cuối cùng đã được cập nhật để phản ánh cái chết của nó.
Khác:
Có những công cụ khác, nếu bạn quan tâm, hãy đọc Tóm tắt dự án trong Hướng dẫn sử dụng bao bì Python. Tôi sẽ không liệt kê tất cả, để không lặp lại trang đó, và để giữ cho câu trả lời phù hợp với câu hỏi, đó là chỉ về distribute
, distutils
, setuptools
và distutils2
.
Sự giới thiệu:
Nếu tất cả những điều này là mới đối với bạn và bạn không biết bắt đầu từ đâu, tôi sẽ khuyên bạn nên họcsetuptools
cùng với pip
và virtualenv
tất cả đều phối hợp rất tốt.
Nếu bạn đang tìm kiếm vào virtualenv
, bạn có thể quan tâm đến câu hỏi này: sự khác nhau giữa là gì venv
, pyvenv
, pyenv
, virtualenv
, virtualenvwrapper
, vv? . (Vâng, tôi biết, tôi than vãn với bạn.)