Зачем использовать 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.
Причин может быть две:
Пип обеспечивает
uninstall
командаесли в середине произойдет сбой установки, 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
сейчас более или менее на равных.
В дополнение к ответу нечеткого человека:
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