Зачем использовать pip вместо easy_install? [закрыто]

936

Твит гласит:

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

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

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

Шридхар Ратнакумар
источник
74
До того, как я увидел этот вопрос, я ответил на несвязанный вопрос: не используйте easy_install, используйте pip. Теперь мне интересно, почему я это сказал ...
Даниэль Роузман
21
Я все еще сталкиваюсь с пакетами, которые приводят к сбою pip, но easy_install прекрасно справляется, поэтому мне тоже интересно.
Кватфорд
5
pyobjc-core - пример пакета, который работает с easy_install, но не с pip.
Марк Абрамовиц,
5
Возвращаясь к питону четыре года спустя, состояние упаковки не испортилось. Это 2014 год, и он только ухудшился. Из того, что я понимаю, setuptools впитал distutils, хотя официальные документы по питону не замечают этого, но ни один из них не будет частью Python 3 , а pip висит как третье колесо (каламбур).
Андрей Дроздюк
3
@drozzy: Вы вернулись в самый неподходящий момент - сразу после того, как группа основных разработчиков решила, что все стало таким беспорядком, что им пришлось вмешаться в решение проблемы. setuptoolsне является частью Python 3, потому что pipесть, и это единственная часть, которая нужна конечным пользователям. (И разработчики, которые хотят распространять на PyPI, могут, очевидно pip install setuptools, и все остальное, что они могли бы хотеть.)
abarnert

Ответы:

304

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

  • Двоичные пакеты теперь распространяются в виде колес ( .whlфайлов) - не только в PyPI, но и в сторонних репозиториях, таких как пакеты расширений Christoph Gohlke для 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если вы хотите обновить это.

abarnert
источник
9
@drozzy: Возможно. Но учтите, что через 5 лет мой ответ будет таким же устаревшим, как и все остальные, в то время как ответ Даниэля Роузмана не подвластен времени. Кроме того, мой ответ не был бы таким хорошим, если бы он не мог рассчитывать на указание на 5-летний принятый ответ, который демонстрирует, почему сообщество Python отстало pipв прошедшее время.
Абарнерт
2
Стоит отметить, что некоторые упакованные версии pip были с ошибками, и pip не смог обновить себя. Считаете ли вы это ироничным или нет, в этих случаях самое простое решение - сделать easy_install -U pipили easy_install3 -U pip.
аналитик
«но даже не работаю должным образом easy_install» Это был не мой опыт, хотя я давно не пробовал, так как сейчас доминируют колеса. Но двоичные файлы Кристофа Гольке использовались как исполняемые яйца. Позвонить easy_installим было единственным способом установить эти пакеты в виртуальной среде, и это никогда не вызывало у меня изжоги. easy_installКаким образом больше не работает с виртуальными envs?
jpmc26
599

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

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

  • Все пакеты загружаются перед установкой. Частично завершенная установка не происходит в результате.
  • Мы стараемся представить полезный вывод на консоли.
  • Причины действий отслеживаются. Например, если пакет устанавливается, pip отслеживает, почему этот пакет был необходим.
  • Сообщения об ошибках должны быть полезны.
  • Код относительно лаконичен и сплочен, что облегчает его использование программно.
  • Пакеты не должны быть установлены как архивы яиц, они могут быть установлены как плоские (сохраняя метаданные яйца).
  • Встроенная поддержка других систем контроля версий (Git, Mercurial и Bazaar)
  • Деинсталляция пакетов.
  • Простое определение фиксированных наборов требований и надежное воспроизведение набора пакетов.
Даниэль Роузман
источник
63
Преимущество «сообщений об ошибках» огромно, особенно для новых пользователей. Простота установки известна тем, что она выдает десятки, которые выглядят как фатальные ошибки, и в любом случае делает успешную установку, что затрудняет ее использование, пока вы не научитесь игнорировать почти все, что говорится. Пип просто пропускает эти вещи.
Брэндон Родс
1
@Glyph есть преимущество использования easy_install pipболее sudo apt-get install python-pip?
Деннис
2
Не используйте easy_install вне virtualenv в дистрибутивах на основе пакетов: workaround.org/easy-install-debian
Федерико,
11
@Dennis: при использовании sudo apt-getUbuntu / Debian будет устанавливать пакеты Python в /usr/lib/python/dist-packagesто время как sudo pipили sudo easy_installбудет устанавливать в, /local/lib/python/site-packagesи, к сожалению, пакеты Debian / Ubuntu часто имеют разные имена, с которыми pip не знаком. Лучшее решение IMHO - использовать virtualenv и pipустанавливать там свои пакеты.
Марк Микофски
2
Это нуждается в обновлении.
Андрей Дроздюк
248

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

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

введите описание изображения здесь

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

введите описание изображения здесь

Мэтью Ранкин
источник
47
Инфографика FTW
WineSoaked
34
OTOH, второй график устарел в течение года. дистрибутив достигнет конца срока службы и будет заменен distutils2 (который также будет в стандартной библиотеке Python, начиная с 3.3). Базовый установщик pysetup предоставляется как part или distutils2, и pip продолжит предоставлять дополнительные функции поверх distutils2 в будущем.
Эрик Араужо
7
О, спасибо большое. я был смущен упаковкой python в течение многих лет, и мне приятно видеть полуавторитетный путь вперед.
Аарон
61
По состоянию на март 2013 года distributeсливается сsetuptools . pipработает. packaging( distutils2) не входит в Python 3.3 .
JFS
21
Этот «ответ» настолько устарел и просто ошибочен, что даже не смешен.
Только нет
172

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

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

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

Нед Бэтчелдер
источник
1
Так что делает setuptoools сейчас. Хм ... вроде как. pythonhosted.org/setuptools/…
Андрей Дроздюк
116

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

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

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

Мэтью Шинкель
источник
1
Похоже, теперь это тоже часть setuptools: pythonhosted.org/setuptools/…
Андрей Дроздюк
Вы должны использовать pipreqsдля получения файла needs.txt. Он выдаст только библиотеки, относящиеся к проекту, в который вы вызываете pipreqs, так что require.txt будет основан на проекте, а не на virtualenv.
SeF
83

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

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

fuzzyman
источник
3
Интересно, я никогда не думал об этом. pip также не поддерживает дополнительные функции setuptools, которые, по крайней мере, используются людьми из Zope.
Шридхар Ратнакумар
1
Является ли это признаком необходимости использования среды gcc в Windows, вместо того, чтобы настаивать на установке pip предварительно собранных двоичных файлов?
WineSoaked
18
«Правильный» компилятор для Windows - это Visual Studio (2008, я думаю, для последних версий Python). Установка этой, даже бесплатной версии, является проблемой. Нормальный способ установки расширений C на Windows , от предварительно скомпилированных двоичных файлов. easy_install поддерживает это, pip - нет.
fuzzyman
8
Это основные причины, по которым я до сих пор использую easy_install.
Рэнди Сайринг
14
За годы, прошедшие с тех пор, как был дан вышеуказанный ответ, теперь уже не верно, что pip не может устанавливать бинарные пакеты на Windows или на других платформах. wheelФормат двоичного распределения делает это возможным. Многие сторонние пакеты с модулями расширения C также распространяются в виде колес, созданных для различных платформ, и pip может их автоматически устанавливать. См. Например, pythonwheels.com
Нед Дейли
76

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

Источник: http://pythonhosted.org/setuptools/merge-faq.html#why-setuptools-and-not-distribute-or-another-name

user3341691
источник
5
Почему это не проголосовало больше? Ответы так устарели!
Андрей Дроздюк
5
да, главные ответы чрезвычайно устарели
WKordos
2
Следовательно, easy_install и pip теперь более или менее равны. Это нонсенс. easy_installэто то, чем он был в течение долгого времени, и он значительно улучшился. easy_installэто только часть setuptoolsи, возможно, одна из худших, поэтому pip стремится заменить ее.
Петр Доброгост,
25

В дополнение к ответу Пушистика:

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#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 вместо яиц. Вернусь и сообщу об этом.

ура - Крис

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

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

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

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

Кристиан Тисмер
источник
2
обновлено выше - я думаю, что ожидание почти закончено ;-)
Кристиан Тисмер
Я должен обновить это, опять же, потому что колесо стало стандартом весной 2014 года. На самом деле, я думаю, что такие старые темы не следует менять до бесконечности, потому что - старые ответы были довольно хорошими - все легко заменить, когда реальность меняется. Но справедливо ли, когда первоначальная причина вопроса исчезла?
Кристиан Тисмер
3

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

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

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

easy_install GitPython
Landys
источник
6
Я проверил это прямо сейчас (см. Отметку времени), и это уже не так: и pip, и easy_install работали одинаково, что привело к GitPython 0.3.5 сегодня. (Проверено на OS X Yosemite, только). Какая у тебя платформа? Пожалуйста, обновите вашу запись, потому что она вводит в заблуждение.
Кристиан Тисмер