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
и переход на правильные стандарты требует затрат.