Зачем использовать pip над easy_install?

A tweet гласит:

Не используйте easy_install, если вы не используете как колоть себя в лицо. Используйте pip.

Зачем использовать pip над easy_install? Разве не проблема связана с PyPI и авторами пакетов в основном? Если автор загружает архивный архив tar (например: отсутствующие файлы, без setup.py) в PyPI, то и pip, и easy_install не удастся. Помимо косметических различий, почему люди Python (например, в приведенном выше твитте), как правило, сильно предпочитают pip над easy_install?

(Предположим, что мы говорим о easy_install из пакета Distribute, который поддерживается сообществом)

Ответ 1

Многие из ответов здесь устарели до 2015 года (хотя изначально принятого от Daniel Roseman нет). Здесь текущее состояние вещей:

  • Двоичные пакеты теперь распространяются как колеса (.whl файлы) - не только на PyPI, но и в сторонних репозиториях, таких как Christoph Gohlke Extension Packages для Windows. pip может обрабатывать колеса; easy_install не может.
  • Виртуальные среды (которые встроены в 3.4 или могут быть добавлены в 2.6 +/3.1 + с virtualenv) стали очень важный и выдающийся инструмент (и рекомендованный в официальные документы); они включают pip из коробки, но даже не работают с easy_install.
  • Пакет distribute, содержащий easy_install, больше не поддерживается. Его улучшения по сравнению с setuptools снова слились в setuptools. Попытка установить distribute будет просто устанавливать setuptools вместо этого.
  • easy_install сам поддерживается только квазиустойчиво.
  • Все случаи, когда pip раньше уступали easy_install -установке из распакованного дерева исходных текстов, из репо DVCS и т.д. - давно прошли; вы можете pip install ., pip install git+https://.
  • pip поставляется с официальными пакетами Python 2.7 и 3.4+ от python.org, а bootstrap pip включен по умолчанию, если вы создаете из исходного кода.
  • Различные неполные биты документации по установке, использованию и созданию пакетов были заменены на Руководство пользователя Python Packaging. Документация Python на Установка модулей Python теперь отсылает к этому руководству пользователя и явно вызывает pip как "предпочтительную программу установки".
  • В течение pip добавлены новые функции, которые никогда не будут находиться в easy_install. Например, pip позволяет легко клонировать ваши пакеты сайтов, создавая файл требований и затем устанавливая его с помощью одной команды с каждой стороны. Или преобразовать файл требований в местное репо, чтобы использовать его для внутреннего развития. И так далее.

Единственная веская причина, по которой я знаю использовать easy_install в 2015 году, - это особый случай использования предустановленных версий Python от Apple с OS X 10.5-10.8. Начиная с 10.5, Apple включила easy_install, но по состоянию на 10.10 они по-прежнему не включают pip. С 10.9+ вы все равно должны использовать get-pip.py, но для 10.5-10.8 у этого есть некоторые проблемы, поэтому проще sudo easy_install pip. (В общем, easy_install pip - плохая идея, и только для OS X 10.5-10.8 вы хотите это сделать.) Кроме того, 10.5-10.8 включает readline таким образом, что easy_install знает, как клонировать вокруг, но pip нет, поэтому вы также хотите sudo easy_install readline, если вы хотите его обновить.

Ответ 2

Из Ian Bicking own введение в pip:

pip изначально был написан для улучшения easy_install следующими способами.

  • Все пакеты загружаются перед установкой. Частично завершенная установка не возникает в результате.
  • Уход за презентацией полезной информации на консоли.
  • Причины действий отслеживаются. Например, если пакет устанавливается, pip отслеживает, почему этот пакет требуется.
  • Сообщения об ошибках должны быть полезными.
  • Код является относительно кратким и сплоченным, что упрощает использование программно.
  • Пакеты не должны устанавливаться как архивы яйца, они могут быть установлены плоскими (сохраняя метаданные яйца).
  • Встроенная поддержка других систем управления версиями (Git, Mercurial и Bazaar)
  • Удаление пакетов.
  • Простое определение фиксированных наборов требований и надежное воспроизведение набора пакетов.

Ответ 3

Другая, еще не упомянутая, причина отдавать предпочтение пипсам заключается в том, что это новый жар и будет использоваться в будущем.

Приведенная ниже инфографика - из раздела " Текущее состояние упаковки " в "Руководстве автостопщика по упаковке v1.0" - показывает, что setuptools/easy_install исчезнет в будущем.

enter image description here

Вот еще одна инфографика из документации по дистрибутиву, показывающая, что Setuptools и easy_install будут заменены на новую версию - дистрибутив и pip. Несмотря на то, что pip по-прежнему остается новым явлением, Distribute объединилась с Setuptools в 2013 году с выпуском Setuptools v0.7.

enter image description here

Ответ 4

Две причины, может быть больше:

  • pip предоставляет команду uninstall

  • если установка завершается неудачно в середине, пипс оставит вас в чистом состоянии.

Ответ 5

ТРЕБОВАНИЯ к файлам.

Серьезно, я использую это в сочетании с virtualenv каждый день.


БЫСТРО УПРАВЛЕНИЕ ЗАВИСИМОСТЬЮ, НАРОДНЫЙ

Файлы требований позволяют создавать снимок всех пакетов, которые были установлены с помощью pip. Инкапсулируя эти пакеты в виртуальной среде, вы можете заставить свою кодовую базу работать с очень конкретным набором пакетов и делиться этой кодовой базой с другими.

Из документации Heroku https://devcenter.heroku.com/articles/python

Вы создаете виртуальную среду и настраиваете ее на использование оболочки. (инструкции bash/* nix)

virtualenv env
source env/bin/activate

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

pip install flask

Теперь вы можете получить информацию о том, какие пакеты установлены с

pip freeze > requirements.txt

Если вы проверили этот файл в системе контроля версий, когда кто-то другой получит ваш код, он может настроить свою собственную виртуальную среду и установить все зависимости с помощью:

pip install -r requirements.txt

В любое время вы можете автоматизировать скуку, как это здорово.

Ответ 6

pip не будет устанавливать бинарные пакеты и не будет хорошо протестирован в Windows.

Поскольку Windows не поставляется с компилятором по умолчанию, пип не может использоваться там. easy_install может устанавливать двоичные пакеты для Windows.

Ответ 8

В качестве дополнения к fuzzyman ответ:

pip не будет устанавливать бинарные пакеты и не будет хорошо протестирован в Windows.

Поскольку Windows не поставляется с компилятором по умолчанию, пип часто не может быть использован там. easy_install может устанавливать двоичные пакеты для Windows.

Вот трюк в Windows:

  • вы можете использовать easy_install <package> для установки бинарных пакетов, чтобы избежать создания двоичного файла

  • вы можете использовать pip uninstall <package>, даже если вы использовали easy_install.

Это просто работа, которая работает для меня в окнах. На самом деле, я всегда использую pip, если не задействованы никакие двоичные файлы.

См. текущую версию doku: http://www.pip-installer.org/en/latest/other-tools.html#pip-compared-to-easy-install

Я спрошу в списке рассылки, что планируется для этого.

Вот последнее обновление:

Новый поддерживаемый способ установки двоичных файлов будет wheel! Это еще не стандарт, но почти. Текущая версия по-прежнему является альфа: 1.0.0a1

https://pypi.python.org/pypi/wheel

http://wheel.readthedocs.org/en/latest/

Я проведу wheel, создав установщик OS X для PySide, используя wheel вместо яиц. Вернется и сообщит об этом.

cheers - Крис

Быстрое обновление:

Переход к wheel почти завершен. Большинство пакетов поддерживают wheel.

Я пообещал построить колеса для PySide, и я сделал это прошлым летом. Отлично работает!

ПОДСКАЗКА: Некоторым разработчикам удалось до сих пор поддерживать формат колес, просто потому, что они забывают замените distutils на setuptools. Часто легко преобразовать такие пакеты, заменив это одно слово на setup.py.

Ответ 9

Просто встретил один специальный случай, который мне пришлось использовать easy_install вместо pip, или мне нужно напрямую вытащить исходные коды.

Для пакета GitPython версия в pip слишком старая, это 0.1.7, а последняя из easy_install - последняя, ​​которая 0.3.2.rc1.

Я использую Python 2.7.8. Я не уверен в механизме нижнего слоя easy_install и pip, но по крайней мере версии некоторых пакетов могут отличаться друг от друга, а иногда easy_install - это версия с более новой версией.

easy_install GitPython