Как setuptools, distribute и pip связаны друг с другом?

Я учил себя Python через книгу "Learn Python The Hard Way" (2-е издание). В упражнении 46 он сказал мне прочитать о Pip, распространить и несколько других пакетов.

документация для pip была достаточно ясной. Это позволяет мне устанавливать / удалять и обновлять пакеты. Читая документацию для distribute, она в основном, кажется, делает то же самое:

легко скачать, построить, установить, обновить и удалить Python пакеты

в чем разница между pip и distribute, и как они относятся друг к другу?

1 ответов


[ 2014-10 TL; DR: distribute мертв, используйте pip новая setuptools, и для двоичных дистрибутивов, wheels. Еще ниже.]


[оригинальный ответ]

распространение is была вилка старшего setuptools поэтому почти все комментарии, которые следуют, применяются одинаково для распространения и setuptools. Setuptools была попыткой заполнить несколько отверстий в еще более старый пакет стандартной библиотеки Python,Distutils. Setuptools добавил функции, такие как автоматическая загрузка пакетов через интерфейс командной строки,easy_install, и некоторый уровень управления зависимостями. Тем не менее, сегмент сообщества Python считает, что setuptools слишком навязчив и имеет слишком много закулисной магии для некоторых его функций.

pip - это интерфейс более высокого уровня поверх setuptools или Distribute. Он использует их для выполнения многие из его функций, но избегает некоторых из их более спорных особенностей, таких как яйца на молнии. pip также предоставляет функции, недоступные в setuptools, как команда удаления и возможность определять фиксированные наборы требований и надежно воспроизводить набор пакетов. Существует более полное сравнение функций здесь.

почему так много компонентов (и их больше, как buildout)? Много причин: решения должны работать через все основные платформы, на которых поддерживается Python (например, Unix-y, Windows, Mac OS X), поэтому построение и установка представляют собой комплекс набор проблем; как и многие проекты с открытым исходным кодом, Python по существу является добровольцем, и многие разработчики просто не заинтересованы в вопросах упаковки и установки; существует естественный консерватизм в добавлении основных новых недоказанных функций в стандартную библиотеку; различия во мнениях и т. д.

на данный момент, в настоящее время осуществляется проект по замене дистрибутивов и, возможно, некоторых надстроек более высокого уровня. Планируется, что он будет выпущен в стандартной библиотеке 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 теперь устарел и больше не поддерживается; используйте новый но не используйте его 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 Руководство Пользователя.