Python memiliki sejarah membingungkan alat yang dapat digunakan untuk paket dan menjelaskan proyek-proyek: ini termasuk distutils
di Perpustakaan Standard, distribute
, distutils2
, dan setuptools
(dan mungkin lebih). Tampaknya distribute
dan distutils2
tidak lagi mendukung setuptools
, yang meninggalkan dua standar yang bersaing.
Untuk pemahaman saya setuptools
menawarkan opsi yang jauh lebih banyak (misalnya mendeklarasikan dependensi, tes, dll) daripada distutils
, namun tidak termasuk dalam pustaka standar Python (belum?).
The Python Kemasan Panduan Pengguna [ 1 ] merekomendasikan sekarang:
Gunakan
setuptools
untuk mendefinisikan proyek dan membuat Distribusi Sumber.
Dan menjelaskan:
Meskipun Anda dapat menggunakan pure
distutils
untuk banyak proyek, itu tidak mendukung mendefinisikan dependensi pada proyek lain dan kehilangan beberapa utilitas kenyamanan untuk secara otomatis mengisi metadata paket dengan benar yang disediakan olehsetuptools
. Berada di luar perpustakaan standar, setuptools juga menawarkan set fitur yang lebih konsisten di berbagai versi Python, dan (tidak sepertidistutils
),setuptools
akan diperbarui untuk menghasilkan format standar "Metadata 2.0" yang akan datang pada semua versi yang didukung.Bahkan untuk proyek yang memang memilih untuk digunakan
distutils
, ketika pip menginstal proyek seperti itu langsung dari sumber (daripada menginstal dari file roda prebuilt), itu sebenarnya akan membangun proyek Anda menggunakansetuptools
sebagai gantinya.
Namun, melihat ke berbagai file setup.py proyek mengungkapkan bahwa ini tampaknya bukan standar yang sebenarnya. Banyak paket masih menggunakan distutils
dan mereka yang mendukung setuptools
sering mencampur setuptools
dengan distutils
misalnya dengan melakukan impor fallback:
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
Diikuti oleh upaya untuk menemukan cara untuk menulis pengaturan yang dapat diinstal oleh keduanya setuptools
dan distutils
. Ini sering mencakup berbagai cara pengecekan dependensi rawan kesalahan, karena distutils
tidak mendukung dependensi dalam fungsi pengaturan.
Mengapa orang masih melakukan upaya ekstra untuk mendukung distutils
- adalah fakta bahwa setuptools
tidak ada di perpustakaan standar satu-satunya alasan? Apa kelebihannya distutils
dan adakah kekurangan menulis file setup.py yang hanya mendukung setuptools
.
setuptools
adalah alternatif yang disempurnakan untuk distutils
tetapi perhatikan bahwa " Penginstal pip yang disarankan menjalankan semua skrip setup.py dengan , bahkan jika skrip itu sendiri hanya mengimporsetuptools
distutils
" ( sumber )
distutils
telah digabungkan kembali ke dalamsetuptools
, tetapi ada aplikasi warisan yang ditulis untuk digunakandistutils
dan ada biaya yang diperlukan untuk bermigrasi ke standar yang benar.