Зачем использовать 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 исчезнет в будущем.
Вот еще одна инфографика из документации по дистрибутиву, показывающая, что Setuptools и easy_install будут заменены на новую версию - дистрибутив и pip. Несмотря на то, что pip по-прежнему остается новым явлением, Distribute объединилась с Setuptools в 2013 году с выпуском Setuptools v0.7.
Ответ 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.
Ответ 7
UPDATE: setuptools
поглотил distribute
, а не наоборот, как думали некоторые. setuptools
обновляется с последними изменениями distutils
и формами колес. Следовательно, easy_install
и pip
теперь более или менее равны.
Источник: http://pythonhosted.org/setuptools/merge-faq.html#why-setuptools-and-not-distribute-or-another-name
Ответ 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