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

Твит читает:

Не используйте easy_install, если вам не нравится наносить удар себе в лицо. Используйте пипс.

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

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

9 ответов

Решение

Многие из приведенных здесь ответов устарели в 2015 году (хотя первоначально принятый от Даниэля Роузмана нет). Вот текущее состояние вещей:

  • Бинарные пакеты теперь распространяются в виде колес (.whl файлы) - не только в PyPI, но и в сторонних репозиториях, таких как пакеты расширений Кристофа Гольке для 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, а такжеpipСамозагрузка включена по умолчанию, если вы строите из исходного кода.
  • Различные неполные фрагменты документации по установке, использованию и сборке пакетов были заменены Руководством пользователя по пакетированию Python. Собственная документация Python по установке модулей Python теперь относится к этому руководству пользователя и явно призывает pip как "предпочтительная программа установки".
  • Другие новые функции были добавлены в pip на протяжении многих лет, которые никогда не будут в easy_install, Например, pip позволяет легко клонировать ваши пакеты сайтов, создав файл требований и затем установив его с помощью одной команды на каждой стороне. Или преобразовать файл требований в локальный репозиторий, чтобы использовать его для внутренней разработки. И так далее.

Единственная веская причина, которую я знаю использовать easy_install в 2015 году это особый случай использования предустановленных версий Apple Python с 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 если вы хотите обновить это.

Из собственного вступления Яна Бикинга в pip:

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

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

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

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

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

Причин может быть две:

  1. Пип обеспечивает uninstall команда

  2. если в середине произойдет сбой установки, pip оставит вас в чистом состоянии.

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

Серьезно, я использую это в сочетании с 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

Каждый раз, когда вы можете автоматизировать скуку, как это здорово.

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

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

ОБНОВИТЬ: setuptools впитал distribute а не наоборот, как думали некоторые. setuptools соответствует последним distutils изменения и формат колеса. Следовательно, easy_install а также pip сейчас более или менее на равных.

Источник: http://pythonhosted.org/setuptools/merge-faq.html

В дополнение к ответу нечеткого человека:

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

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

Вот хитрость в Windows:

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

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

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

Смотрите текущую документацию pip: http://www.pip-installer.org/en/latest/other-tools.html.

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

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

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

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

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

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

ура - Крис

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

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

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

СОВЕТ: Некоторым разработчикам пока не удалось поддержать формат колеса просто потому, что они забыли заменить distutils от setuptools, Часто такие пакеты легко преобразовать, заменив это единственное слово в setup.py,

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