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
і для перенесення стандартів необхідні витрати.