Python має заплутану історію інструментів , які можуть бути використані для упаковки і опису проектів: вони включають distutilsв стандартній бібліотеці, distribute, distutils2і setuptools(а можуть і більше). Виявляється , що distributeі distutils2були припинені на користь setuptools, яка залишає два конкуруючих стандартів.
Наскільки я розумію, setuptoolsпропонуються набагато більше варіантів (наприклад, декларування залежностей, тестів тощо) distutils, однак вони не входять у стандартну бібліотеку Python (ще?).
Python Упаковка Керівництво користувача [ 1 ] рекомендує в даний час:
Використовуйте
setuptoolsдля визначення проектів та створення дистрибутивів.
І пояснює:
Хоча ви можете використовувати pure
distutilsдля багатьох проектів, він не підтримує визначення залежностей від інших проектів і не має кількох зручних утиліт для автоматичного заповнення метаданих пакунків, які надаютьсяsetuptools. Знаходячись поза стандартною бібліотекою, setuptools також пропонує більш послідовний набір функцій для різних версій Python, і (на відміну від нихdistutils)setuptoolsбуде оновлено для створення майбутніх стандартних форматів "Metadata 2.0" для всіх підтримуваних версій.Навіть для проектів, які вирішили використовувати
distutils, коли pip встановлює такі проекти безпосередньо з джерела (а не встановлення з попередньо вбудованого файлу колеса), він фактично будує ваш проект, використовуючиsetuptoolsнатомість.
Однак, розглядаючи файли setup.py різних проектів, видно, що це, здається, не є фактичним стандартом. Багато пакетів все ще використовують, distutilsа ті, що підтримують, setuptoolsчасто змішуються setuptoolsз, distutilsнаприклад, здійснюючи резервний імпорт:
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
Після цього намагається знайти спосіб записати налаштування, яке може бути встановлено обома setuptoolsі distutils. Це часто включає різні способи перевірки залежностей від помилок, оскільки distutilsне підтримує залежності у функції налаштування.
Чому люди все ще докладають додаткових зусиль для підтримки distutils- чи не той факт, що setuptoolsв стандартній бібліотеці є єдиною причиною? Які переваги distutilsта чи є недоліки написання файлів setup.py, які підтримують лише setuptools.
setuptoolsє розширеною альтернативою, distutilsале зауважте, що " Рекомендований інсталятор pip запускає всі сценарії setup.py setuptools, навіть якщо сам сценарій лише імпортуєdistutils " ( джерело )
distutilsбуло об'єднано назадsetuptools, але є застарілі програми, які були написані для використання,distutilsі для перенесення стандартів необхідні витрати.