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
.