Python имеет запутанную историю инструментов, которые могут быть использованы для упаковки и описания проектов: они включают distutils в стандартной библиотеке, distribute, distutils2 и setuptools (а может и больше). Похоже, что distribute и distutils2 были прекращены в пользу setuptools, что оставляет два конкурирующих стандарта.
Насколько я понимаю, setuptools предлагает гораздо больше опций (например, объявление зависимостей, тестов и т.д.), Чем distutils, однако он не включен в стандартную библиотеку Python (пока?).
Руководство пользователя по упаковке Python [ 1 ] теперь рекомендует:
Используйте
setuptoolsдля определения проектов и создания исходных распределений.
И объясняет:
Несмотря на то, что вы можете использовать чистые
distutilsдля многих проектов, он не поддерживает определение зависимостей от других проектов и пропускает несколько удобных утилит для автоматического заполнения метаданных пакета, которые предоставляютсяsetuptools. Находясь за пределами стандартной библиотеки, setuptools также предлагает более согласованный набор функций для различных версий Python, и (в отличие отdistutils),setuptoolsбудет обновлен для создания будущих стандартных форматов "Метаданные 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.