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