[ 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
|
ОБНОВЛЕНИЕ (2012-07) : До обрезания кода функции для Python 3.3 было решено, что packaging
еще не совсем готов к выпуску в стандартной библиотеке, поэтому он был удален из 3.3 релиз. Продолжится работа над Distutils2
, который доступен через PyPI и над тем, что будет включено в стандартную библиотеку для Python 3.4.
ОБНОВЛЕНИЕ (2014-10): С момента последнего обновления этого ответа в мире упаковки Python произошли дальнейшие изменения.
Самое главное, что с середины 2013 года разрыв между setuptools
и
distribute
было исцелено, а деятельность по разработке было объединено
в новый setuptools
проект . distribute
сейчас
устарел и больше не поддерживается; используйте вместо этого setuptools
но не используйте его easy_install
в качестве установщика.
pip
стал де-факто и благословенным инструментом установки (для Python
пакеты, не предоставленные менеджером пакетов вашей платформы)
внутри или вне виртуальных сред (virtualenv
или pyvenv
).
Вместо старого setuptools
bdist eggs
, wheels
есть
стать благословенным двоичным форматом распространения пакетов Python.
Начиная с Python 3.4 , версия pip
с поддержкой wheel
теперь поставляется с официальными python.org
двоичными установщиками и
исходные пакеты и ожидается, что pip
также будет
включены в следующую версию Python 2.7 (2.7.9) для обслуживания.
Distutils2
и packaging
теперь неактивны.
Подробнее в новом Распространении модулей Python раздела документации по Python 3 и новом Руководстве пользователя по Python Packaging .