Ответ 1
[ 2014-10 TL; DR:
distribute
мертв, используйте pip
, новый setuptools
и для двоичных распределений wheels
. Еще ниже.]
[Исходный ответ]
Distribute is был вилкой старшего setuptools, поэтому почти все комментарии, которые следуют ниже, в равной степени относятся к Distribute и setuptools. Программа Setuptools была попыткой заполнить ряд отверстий в еще более старом стандартном пакете библиотеки Python, Distutils. В Setuptools добавлены функции, такие как автоматическая загрузка пакетов через интерфейс командной строки, easy_install
и некоторый уровень управления зависимостями. Тем не менее, сегмент сообщества Python считает, что setuptools слишком навязчивый и имеет слишком много закулисных магии для некоторых своих функций.
pip
- это интерфейс более высокого уровня поверх настроек setuptools или Distribute. Он использует их для выполнения многих своих функций, но избегает некоторых из их более противоречивых особенностей, таких как замятые яйца. pip
также предоставляет функции, недоступные в setuptools
, например, команду удаления и возможность определять фиксированные наборы требований и надежно воспроизводить набор пакетов. Ниже приведено более полное сравнение функций здесь.
Почему так много компонентов (и есть больше, например buildout
)? Множество причин: решения должны работать на всех основных платформах, на которых поддерживается Python (например, Unix-y, Windows, Mac OS X), поэтому создание и установка представляют собой сложный набор проблем; как и многие проекты с открытым исходным кодом, Python по сути является волонтером, и многие разработчики не так уж заинтересованы в вопросах упаковки и установки; существует естественный консерватизм в отношении добавления основных стандартных недоказанных функций в стандартную библиотеку; различия во мнениях и т.д. и т.д.
В настоящий момент существует проект, предусматривающий замену Distutils и, возможно, некоторых надстроек надстройки. Он будет выпущен в стандартной библиотеке Python 3.3 в виде пакета packaging
и в качестве дополнения для более старых версий Python как Distutils2
.
Подводя итог, текущее соотношение:
pip -> [ setuptools | Distribute ] -> Distutils -> Python core
|
3rd party packages | included in Python
|
UPDATE (2012-07). До отключения кода функции для Python 3.3 было решено, что packaging
еще не был готов к выпуску в стандартной библиотеке, поэтому он был удален из выпуск 3.3. Работа будет продолжена на Distutils2
, которая доступна через PyPI и на том, что будет включено в стандартную библиотеку для Python 3.4.
UPDATE (2014-10): В мире упаковки Python произошли дальнейшие изменения, так как этот ответ был последним.
-
Самое главное, что с середины 2013 года разрыв между
setuptools
иdistribute
был исцелен, а деятельность по развитию была объединена в новый проектsetuptools
.distribute
теперь устарел и больше не поддерживается; используйте вместо этого новыйsetuptools
но не используйте егоeasy_install
как установщик. -
pip
стал де-факто и благословенным инструментом установки (для Python пакеты, не предоставленные другим менеджером пакетов) либо вне виртуальных сред (virtualenv
илиpyvenv
). -
Вместо старого
setuptools
bdisteggs
wheels
есть стать блаженным бинарным форматом распространения для пакетов Python. -
Начиная с Python 3.4, версия
pip
с поддержкойwheel
теперь поставляется с официальными установщикамиpython.org
и исходных пакетов, и ожидается, чтоpip
также будет включен в следующий релиз обслуживания Python 2.7 (2.7.9). -
Distutils2
иpackaging
теперь неактивны.
Подробнее в новом разделе Распространение модулей Python в документах Python 3 и новом Руководство пользователя Python Packaging.