Навіщо використовувати pip через easy_install? [зачинено]


936

Твіт говорить:

Не використовуйте easy_install, якщо ви не любите колоти себе в обличчя. Використовуйте піп.

Навіщо використовувати pip через easy_install? Чи не винна в основному PyPI та автори пакунків ? Якщо автор завантажує програмне забезпечення тарболу (наприклад: відсутні файли, немає setup.py) на PyPI, тоді і pip, і easy_install не вдасться. Окрім косметичних відмінностей, чому, схоже, люди Python (як у вищезгаданому твіті) сильно віддають перевагу «pip» через easy_install?

(Припустимо, що ми говоримо про easy_install з пакета Distribute, який підтримується спільнотою)


74
Перш ніж я побачив це запитання, я відповів на неспоріднене, сказавши "не використовуйте easy_install, використовуйте pip". Тепер мені цікаво, чому я це сказав ...
Даніель Роузмен

21
Я все ще стикаюся з пакетами, які призводять до виходу з ладу pip, але easy_install обробляє просто чудово, тому мені також цікаво про це.
kwatford

5
pyobjc-core - це приклад пакету, який працює з easy_install, але не з pip.
Марк Абрамовіч

5
Повернувшись до пітона через чотири роки, стан упаковки не вдається зіпсувати. Це 2014 рік, і він тільки погіршився. З того, що я розумію, distutils поглинали setuptools, хоча офіційні документи python цього не забувають , але жоден з них не буде частиною python 3 , а pip висить навколо, як третє колесо (призначене каламбур).
Андрій Дроздюк

3
@drozzy: Вам трапилося повернутися в найгірший можливий час - одразу після того, як група основних розробників вирішила, що все стало таким безладом, що їм довелося долучитися до вирішення проблеми. setuptoolsне є частиною Python 3, тому що pipє, і це єдина частина, яка потребує кінцевих користувачів. (І розробники, які хочуть розповсюджувати на PyPI, очевидно pip install setuptools, і все інше, що вони можуть захотіти.)
abarnert

Відповіді:


304

Багато відповідей тут застаріли на 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 Packaging . Власна документація Python про встановлення модулів Python тепер відстежується в цьому посібнику користувача і явно називає його pip"бажаною програмою для встановлення".
  • Інші нові функції були додані pipпротягом багатьох років, які ніколи не будуть easy_install. Наприклад, pipполегшує клонування веб-сайтів, створивши файл вимог, а потім встановивши його однією командою на кожній стороні. Або конвертувати файл своїх вимог в локальний репо, який буде використаний для внутрішньої розробки. І так далі.

Єдиною вагомою причиною, яку я знаю використовувати easy_installу 2015 році, є особливий випадок використання попередньо встановлених версій Python від Apple з ОС 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якщо ви хочете оновити це.


9
@drozzy: Можливо. Але врахуйте, що ще через 5 років моя відповідь буде такою ж застарілою, як і всі інші, тоді як Даніель Роузмен - позачасовим. Крім того, моя відповідь не була б такою доброю, якби вона не могла покластися на вказівку на 5-річну прийняту відповідь, яка демонструє, чому спільнота Python відстала pipв цей час.
abarnert

2
Варто зазначити, що деякі упаковані версії pip були помилковими, а pip не зміг оновитись. Незалежно від того, вважаєте ви це іронічним чи ні, в тих випадках найпростіше рішення зробити easy_install -U pipабо easy_install3 -U pip.
analytik

", але навіть не працюйте належним чином з easy_install" Це не було моїм досвідом, хоча я вже не намагався, оскільки колеса зараз домінують. Але бінарні файли Крістофа Голке використовувались як виконувані яйця. Зателефонувавши easy_installдо них, було єдиним способом встановити ці пакунки у віртуальне середовище, і це ніколи не дало мені печії. Яким чином easy_installбільше не працює з віртуальними околицями?
jpmc26

599

З власного вступу Ian Bicking до 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
Federico

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

Ще одна - як поки що не згадана - причина переваги Pip полягає в тому, що це нова гарячість і надалі буде використовуватися в майбутньому.

Інфографіка нижче - з розділу Поточний стан упаковки в Посібнику автостопом до упаковки v1.0 - показує, що setuptools / easy_install піде в майбутньому.

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

Ось ще інфографіка від поширення документації'S , яка б показала , що Setuptools і easy_install буде замінено новим hotness- поширювати і піп . У той час як pip все ще є новою актуальністю, Distributer об'єднався з Setuptools у 2013 році з випуском Setuptools v0.7.

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


47
Інфографіка FTW
WineSoaked

34
OTOH, друга графіка застаріла на рік. розподіл досягне кінця терміну служби і буде заміщений distutils2 (який також буде в стандартній бібліотеці Python, починаючи з 3.3). Базовий інсталятор з ім'ям pysetup надається як частина або distutils2, і pip надалі надаватиме додаткові функції поверх distutils2 у майбутньому.
Éric Araujo

7
omg дякую тобі велике мене плутають пітонові упаковки протягом багатьох років, і це чує бачити напівавторитетний шлях вперед.
aaron

61
Станом на березень 2013 року distributeназад зливаєтьсяsetuptools . pipпрацює. packaging( distutils2) не входить до Python 3.3 .
jfs

21
Ця "відповідь" настільки застаріла і просто неправильна, що навіть смішна.
onlynone


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для отримання файлу вимог.txt. Він надасть лише бібліотеки, пов'язані з проектом, куди ви дзвоните pipreqs, так що вимоги.txt будуть базуватися на проекті, а не на virtualenv.
СеФ

83

pip не встановлюватиме двійкові пакети і недостатньо перевірений у Windows.

Оскільки Windows не поставляється з компілятором за замовчуванням, pip часто не може бути використаний там. easy_install може встановити бінарні пакети для Windows.


3
Цікаво, що я ніколи про це не думав. pip також не підтримує налаштування "екстри", які використовуються принаймні людьми Zope.
Шрідхар Ратнакумар

1
Це вказівка ​​на потребу в середовищі gcc для Windows, а не наполягання на тому, що Pip встановлює попередньо вбудовані бінарні файли?
WineSoaked

18
"Правильним" компілятором для Windows є Visual Studio (я вважаю, для останніх версій Python). Встановити цю навіть безкоштовну версію - це клопот. Нормальний спосіб установки розширень C на Windows , від попередньо скомпільовані довічних файлів. easy_install підтримує це, pip не робить.
нечіткий

8
Це основна причина, чому я все ще використовую easy_install.
Ренді Сірінг

14
За роки, з яких дана відповідь вище, тепер уже не вірно, що pip не може встановлювати двійкові пакети в Windows або на інших платформах. wheelФормат довічного розподілу робить це можливим. Багато інших сторонніх пакетів із модулями розширення C також розповсюджуються, оскільки колеса, побудовані для різних платформ, і pip можуть автоматично встановлювати їх. Дивіться, наприклад, pythonwheels.com
Ned Deily

76

ОНОВЛЕННЯ: setuptoolsпоглинається distributeна відміну від навпаки, як думали деякі. setuptoolsоновлений останніми distutilsзмінами та форматом колеса. Отже, easy_installі pipзараз більш-менш рівноправні.

Джерело: http://pythonhosted.org/setuptools/merge-faq.html#why-setuptools-and-not-distribute-or-another-name


5
Чому цього більше не схвалено? Відповіді такі застарілі!
Андрій Дроздюк

5
так, головні відповіді надзвичайно застаріли
WKordos

2
Отже, easy_install та pip зараз більш-менш рівноцінні. Це нісенітниця. easy_installдосі це те, що було давно, і піп надзвичайно покращує його. easy_installце лише частина setuptoolsі, мабуть, одна з найгірших, тому піп прагне її замінити.
Пьотр Доброгост

25

Як додаток до відповіді нечіткої людини:

pip не встановлюватиме двійкові пакети і недостатньо перевірений у Windows.

Оскільки Windows не поставляється з компілятором за замовчуванням, pip часто не може бути використаний там. easy_install може встановити бінарні пакети для Windows.

Ось хитрість для Windows:

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

  • ви можете використовувати pip uninstall <package>навіть якщо ви використовували easy_install.

Це просто обхід, який працює для мене на windows. Насправді я завжди використовую 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 року. Насправді, я думаю, що такі старі теми не слід змінювати ad infinitum, тому що - старі відповіді були досить гарними - їх легко замінити, коли зміниться реальність. Але чи справедливо, коли оригінальної причини для питання немає?
Крістіан Тісмер

3

Щойно зустріла один особливий випадок, який мені довелося використовувати 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

6
Я перевірив це зараз (див. Позначку часу), і це вже не відповідає дійсності: і pip, і easy_install працювали однаково, в результаті чого GitPython 0.3.5 сьогодні. (Тестовано лише на OS X Yosemite). Яка ваша платформа? Оновіть свою заявку, оскільки вона вводить в оману.
Крістіан Тісмер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.