Чим відрізняється піп від конди?


721

Я знаю pip, що це менеджер пакунків для пакетів python. Однак я побачив, що установка на веб-сайті IPython використовує condaдля встановлення IPython.

Чи можу я використовувати pipдля встановлення IPython? Чому я повинен використовувати condaяк ще один менеджер пакунків python, коли він уже є pip?

У чому різниця між pipі conda?


Уважно прочитавши сторінку встановлення, ви побачите повну інструкцію щодо встановлення з допомогою pip, на яку conda/ enpgkорієнтовано new users who want to get up and running with minimal effort: canopy / anaconda - це окреме оточення, яке не заважає системному пітону (наприклад, venv, але більш потужне). BTW IPyhton, а не iPython (верхній регістр I)
Метт

3
Одна відмінність полягає в тому, що набагато більше речей можна встановити через pip, ніж через conda: pip може встановити що-небудь із pypi в одній команді. conda вимагає трьох команд: скелет, збирання, встановлення і, можливо, більше, якщо це не працює. pip може встановити що-небудь з github або source в одній команді. conda вимагає написання «рецепту», що непросто, тим більше, що документація завжди здається неправильною / застарілою.
ендоліт

5
Питання, пов'язані з цим: Які ПЕРЕВАГИ піпі над кондою? Знизу я бачу багато адвокатських прав на Анаконда, але нічого не стосується. Чому піп все ще є стандартом, якщо анаконда така велика?
Брайан Постув

24
Цю цитату я вважаю освічуючою: " Pip - менеджер пакунків, а Virtualenv - менеджер з навколишнього середовища. Conda - це обоє". (
відкр

1
Спостереження: я думав, що конда передбачає завантаження пакетів на мільйон, але це вже не відповідає дійсності: ви можете встановити мініконду, яка, по суті, є лише менеджером пакунків, conda.io/docs/install/quick.html
Х'ю Перкінс

Відповіді:


520

Цитуючи з блогу Conda :

Ми так довго працювали в світі пітонів, всі ми знаємо про pip, easy_install та virtualenv, але ці інструменти не відповідали всім нашим конкретним вимогам. Основна проблема полягає в тому, що вони зосереджені навколо Python, нехтуючи залежностями бібліотеки, що не належать Python, такі як HDF5, MKL, LLVM тощо, які не мають setup.py у своєму вихідному коді, а також не встановлюють файли на сайт Python -пакет пакунків.

Отже, Conda - це пакувальний інструмент та інсталятор, який прагне зробити більше, ніж те, що pipробить; обробляти залежності бібліотеки поза пакетами Python, а також самими пакетами Python. Conda також створює віртуальне середовище, як virtualenvце робить.

Таким чином, Conda слід порівнювати з Buildout, можливо, іншим інструментом, який дозволяє вам обробляти як завдання встановлення Python, так і не-Python.

Оскільки Conda представляє новий формат упаковки, ви не можете використовувати pipта Conda взаємозамінно; pipне вдається встановити формат пакету Conda. Ви можете використовувати два інструменти поруч (встановивши за pipдопомогою conda install pip), але вони також не взаємодіють.

Після написання цієї відповіді Anaconda опублікувала нову сторінку про Розуміння Конди та Піпа , яка також повторює це:

Це підкреслює ключову різницю між кондою та піпом. Pip встановлює пакети Python, тоді як conda встановлює пакети, які можуть містити програмне забезпечення, написане будь-якою мовою. Наприклад, перш ніж використовувати pip, інтерпретатор Python повинен бути встановлений через менеджер системних пакетів або завантажити та запустити інсталятор. З іншого боку, Conda може встановлювати пакети Python, а також інтерпретатор Python безпосередньо.

і далі

Інколи потрібен пакет, який недоступний у вигляді пакету conda, але він доступний на PyPI і може бути встановлений за допомогою pip. У цих випадках має сенс спробувати використовувати як конду, так і піп.


18
Дякуємо за ваше пояснення. Я все ще плутаюсь з тим, чи може Конда замінити піп? тобто може Conda робити все, що може зробити pip?
lazywei

10
@lazywei: Я не думаю, що це може; наприклад, Conda підтримує формат колесного архіву, наприклад. Вони мають різні цілі.
Martijn Pieters

45
@ naught101 "Просто створіть рецепт" Це не так просто, як набрати текст pip install.
ендоліт

23
Чи можете мені хтось пояснити, що трапиться, якщо ви використовували pip і conda для встановлення одного і того ж пакету, за винятком іншої версії, яка використовувала б python, коли ви імпортуєте їх?
Ланс Руо Чжан

4
@jrh: ви не можете встановити кілька версій одного і того ж пакета поряд з використанням менеджера пакунків ОС, а не як основної функції. Conda управляє середовищами , кожен з яких має власну суміш встановлених пакетів у певних версіях. Отже проект A, який був розроблений деякий час тому, все ще може чіплятися за старішу версію бібліотеки Foo (немає ресурсів для оновлення проекту для роботи з новим випуском), тоді як проект B вимагає новітньої версії тієї ж бібліотеки.
Martijn Pieters

245

Ось короткий пробіг:

піп

  • Пакети лише Python.
  • Компілює все з джерела. EDIT: pip тепер встановлює двійкові колеса, якщо вони є.
  • Блаженний основним спільнотою Python (тобто, Python 3.4+ включає код, який автоматично завантажує pip).

конда

  • Python agnostic. Основна увага в існуючих пакетах приділяється Python, і сама Конда написана на Python, але ви також можете мати пакети Conda для бібліотек C, або R-пакети, або все що завгодно.
  • Встановлює двійкові файли. Існує інструмент, який називається, conda buildякий створює пакети з джерела, але conda installсам встановлює речі з уже вбудованих пакетів Conda.
  • Зовнішні. Conda - менеджер пакунків Anaconda, дистрибуцію Python, яку надає Continuum Analytics, але її можна використовувати і поза Anaconda. Ви можете використовувати його з існуючою установкою Python, встановивши pip (хоча це не рекомендується, якщо у вас немає вагомих причин використовувати існуючу установку).

В обох випадках:

  • Написано Python
  • Відкритий код (Conda - BSD, а pip - MIT)

Перші два пункти кулі Conda - це дійсно те, що робить її вигіднішою за pip для багатьох пакетів. Оскільки встановлення файлу з джерела може бути болісно встановлювати речі, якщо ви не в змозі скласти вихідний код (особливо це стосується Windows, але це може бути правдою і для Linux, якщо пакети мають складну бібліотеку C або FORTRAN залежності). Конда встановлюється з двійкового, це означає, що хтось (наприклад, Континуум) вже зробив важку роботу зі складання пакету, і тому установка проста.

Також є деякі відмінності, якщо ви зацікавлені у створенні власних пакетів. Наприклад, pip побудований на версії setuptools, тоді як Conda використовує власний формат, який має деякі переваги (наприклад, статичний, і знову ж таки, агностик Python).


21
pip більше не будує все з джерела. Якщо колесо доступне, pip install --use-wheel <package>встановіть вбудований пакет. Дивіться тут: wheel.readthedocs.org/uk/latest . Однак мій особистий досвід роботи з колесом полягає в тому, що існує так мало наукових колесних пакетів, що це суто академічний характер. І звичайно, встановлення файлів pip здебільшого не працює ні на Windows, якщо ваше середовище збирання не налаштоване правильно. Тож на даний момент, conda ftw.
Калеб Хаттінг

4
Колеса все ще нові і не використовуються за замовчуванням, тому не дивно, що їх ще не дуже багато. Колесо все ще входить до категорії "специфічних для Python", але це означає, що це може бути погано придатним для пакетів, які не належать до Python, або пакетів Python, які залежать від пакетів, які не належать до Python.
асмеурер

4
Мені довелося спростувати це: друга точка кулі - це лише історична нота, але ви також підете на неї пізніше. Основна відмінність цих днів полягає в тому, що pip - це менеджер пакунків, а conda - це більше менеджер з навколишнього середовища.
Шеп

9
Це правда, що pip може збиратися з джерела, але це стає все рідше і рідше, оскільки все більше переміщення пакету до колеса: в ці дні я можу встановити більшість того, що мені потрібно за кілька секунд за допомогою pip. Тож не про те, що ця відповідь є неправильною, вона просто злегка застаріла, оскільки піп досить сильно покращився за останні кілька років
Шеп

4
Вона ніколи і НЕ було правдою , що піп можна встановити тільки з джерела. Перед колесами у нас були яйця як формат бінарного встановлення за замовчуванням та рекомендований формат розповсюдження для інсталяцій Windows, а pip (і все ще буде) встановлює яйця, якщо це найкращий доступний варіант.
Martijn Pieters

96

В інших відповідях чітко описуються деталі, але я хочу висвітлити деякі високі моменти.

pip - це менеджер пакунків, який полегшує встановлення, оновлення та видалення пакетів python . Він також працює з віртуальними середовищами python .

conda - це менеджер пакунків для будь-якого програмного забезпечення (встановлення, оновлення та видалення). Він також працює з віртуальними системними середовищами.

Однією з цілей дизайну conda є полегшення управління пакетами для всього програмного забезпечення, необхідного користувачам, з яких одна чи кілька версій python можуть бути лише невеликою частиною. Сюди входять бібліотеки низького рівня, такі як лінійна алгебра, компілятори, такі як mingw в Windows, редактори, засоби управління версіями, такі як Hg і Git, або все інше, що вимагає розповсюдження та управління .

Для управління версіями pip дозволяє перемикатися між кількома середовищами python та керувати ними .

Conda дозволяє перемикатися між ними та керувати кількома середовищами загального призначення, у яких багато інших речей можуть відрізнятися за кількістю версій, як-от C-бібліотеки, компілятори, тестові набори, двигуни бази даних тощо.

Conda не є орієнтованою на Windows, але в Windows - це на сьогоднішній день найкраще рішення, яке доступне в даний час, коли для встановлення та управління складними науковими пакетами, що вимагають компіляції.

Я хочу плакати, коли думаю про те, скільки часу я втратив, намагаючись зібрати багато цих пакунків через pip в Windows, або налагодити невдалі pip installсеанси, коли компіляція була потрібна.

В кінцевому підсумку, Continuum Analytics також розміщує (безкоштовний) binstar.org (зараз його називають anaconda.org ), щоб дозволити звичайним розробникам пакунків створювати власні власні (вбудовані! ) Стеки програмного забезпечення, з яких зможуть користуватися їхні користувачі пакунків conda install.


4
За Вашої кінцевій точці, то третя сторона Конде-горн проект швидко став галузевим стандартом підходом до публікації пакетів Anaconda. Нещодавно ми опублікували декілька пакетів, що розміщуються на конда-куванні, для нашого симулятора багатофізичної біології - і не можемо рекомендувати процес достатньо. Є компонент експертної оцінки GitHub, який базується на PR, для подання нових рецептів для конда-кування, однак переваги щодо автоматизації куріння конда-сильно переважають за перший час. Бам!
Сесіль Карі

@CecilCurry Я імпортував Kerasу свій код, встановив анаконду на моєму комп'ютері, а Keras condaвстановлено та pipвстановлено. Отже, коли я запускаю свій код у терміналі, як я можу знати, що kerasімпортується (той pipчи той conda)?
KPMG

25

Щоб не бентежити вас далі, але ви також можете використовувати pip у своєму конденсаційному середовищі, що підтверджує загальні коментарі до коментарів менеджерів python вище.

conda install -n testenv pip
source activate testenv
pip <pip command>

Ви також можете додати pip до пакунків за замовчуванням у будь-якому середовищі, щоб він був присутній кожен раз, тому вам не доведеться слідувати вищевказаному фрагменту.


Я думав, що це не рекомендується?
ендоліт

8
Повністю рекомендується використовувати піп всередині конди. Краще встановити за допомогою conda, але для будь-яких пакунків, які не мають збірки конди, цілком прийнятно використовувати pip.
Бредлі Крейдер

2
nit: здається, що ця фраза була б fully supported? fully recommendedМає на увазі, що краще використовувати pip, ніж conda, в межах проживання conda, і я не впевнений, що це ти / вони означають?
Х'ю Перкінс

22

Цитата зі статті Conda for Data Science на веб-сайті компанії "Континуум":

Конда проти піп

Програмісти Python, ймовірно, знайомі з pip для завантаження пакетів з PyPI та керування їхніми вимогами. Хоча і конда, і піп є менеджерами пакунків, вони сильно відрізняються:

  • Pip є специфічним для пакетів Python, а conda - мова-агностик, що означає, що ми можемо використовувати conda для управління пакунками з будь-якої мови.
  • Conda спочатку створює мовно-агностичні середовища, тоді як Pip покладається на virtualenv для управління лише середовищем Python. Хоча рекомендується завжди використовувати пакети conda, conda також включає pip, тому вам не доведеться вибирати між цими двома. Наприклад, щоб встановити пакет python, у якому немає пакету conda, але він доступний через pip, просто запустіть, наприклад:
conda install pip
pip install gensim

15

Цитування з Conda: Міфи та омани (вичерпний опис):

...

Міф №3: Конда та Піп є прямими конкурентами

Реальність: Конда та піп служать різним цілям, і лише безпосередньо конкурують у невеликому наборі завдань: а саме встановлення пакетів Python в ізольованих середовищах.

Pip, який розшифровується як P ip I nstalls P acgeges, є офіційно санкціонованим менеджером пакетів Python і найчастіше використовується для встановлення пакетів, опублікованих в індексі пакетів Python (PyPI). І pip, і PyPI регулюються та підтримуються Управлінням пакетування Python (PyPA).

Коротше кажучи, pip - це менеджер загального призначення для пакетів Python; conda - це мовно-агностичний межплатформенний менеджер середовища. Для користувача найяскравіше відмінність, мабуть, це: pip встановлює пакети python у будь-якому середовищі; conda встановлює будь-який пакет у середовищі conda. Якщо все, що ви робите, це встановлення пакетів Python в ізольованому середовищі, conda та pip + virtualenv здебільшого взаємозамінні, що відрізняється від обробки залежностей та наявності пакету. Під ізольованим середовищем я маю на увазі conda-env або virtualenv, в який можна встановлювати пакети, не змінюючи встановлення вашої системи Python.

Навіть відкладаючи Міф №2, якщо ми зосередимось лише на встановленні пакетів Python, conda та pip служать різній аудиторії та різним цілям. Якщо ви хочете, скажімо, керувати пакетами Python в межах наявної системи установки Python, conda не може допомогти вам: замисливши, він може встановлювати пакети лише в середовищах conda. Якщо ви хочете, скажімо, працювати з багатьма пакетами Python, які покладаються на зовнішні залежності (NumPy, SciPy та Matplotlib - загальні приклади), а відстежуючи ці залежності змістовно, pip не може вам допомогти: управляє пакетами Python і лише пакетами Python.

Конда та піп не є конкурентами, а скоріше інструментами, орієнтованими на різні групи користувачів та моделі використання.


1
Я не впевнений, що це дійсно так, поза перспективою позиціонування на ринку. Наприклад, подивіться на pytorch, який пропонує три типи встановлення: conda, pip, source, pytorch.org , і рекомендує: conda
Х'ю Перкінс

2
"Встановлення пакетів Python в ізольованих середовищах" - це головне, для чого більшість розробників Python використовують pip.
Нік

@Nick Хіба це не тоді, коли розробник уже знаходиться у віртуальному середовищі "того"? Я думаю, що pip працює у віртуальному середовищі та встановлює пакет так, ніби він встановлюється для системи. Але, як сказав sanchos.s, він встановлює лише пакети python і не піклується про основні бібліотеки. будь-хто, будь ласка, виправте мене, якщо я помиляюся.
Чан Кім

12

Для користувачів WINDOWS

"Стандартні" пакувальні інструменти ситуація покращується останнім часом:

  • на самому pypi зараз 48% пакетів коліс станом на вересень. 11 2015 (з 38% у травні 2015, 24% у вересні 2014),

  • формат колеса тепер підтримується нестандартно на останньому python 2.7.9,

Поліпшується також ситуація із "стандартними" + "налаштуваннями" пакувальних інструментів:

  • ви можете знайти майже всі наукові пакети у форматі колеса на веб- сайті http://www.lfd.uci.edu/~gohlke/pythonlibs ,

  • проект mingwpy може одного дня принести пакет "компіляції" користувачам Windows, що дозволяє встановити все, що потрібно з джерела, коли це необхідно.

Упаковка "Conda" залишається кращою для ринку, який вона обслуговує, і виділяє сфери, де "стандарт" повинен покращитися.

(Крім того, специфікація залежності багаторазових зусиль, як у стандартній колісній системі, так і в системі conda, або в комплектації, не дуже пітонічна. Було б добре, якби всі ці "основні" способи упаковки могли зблизитися за допомогою свого роду PEP)



2

Чи можна використовувати pip для встановлення iPython?

Звичайно, обидва (перший підхід на сторінці)

pip install ipython

і (третій підхід, другий - conda)

Ви можете завантажити IPython вручну з GitHub або PyPI. Щоб встановити одну з цих версій, розпакуйте її та запустіть наступне із вихідного каталогу верхнього рівня за допомогою терміналу:

pip install .

є офіційно рекомендованими способами установки .

Чому я повинен використовувати conda як інший менеджер пакунків python, коли у мене вже є pip?

Як сказано тут :

Якщо вам потрібен конкретний пакет, можливо, лише для одного проекту, або якщо вам потрібно поділитися проектом з кимось іншим, conda здається більш підходящим.

Конда перевершує піп ( YMMV )

  • проекти, які використовують непітонські інструменти
  • обмін з колегами
  • перемикання між версіями
  • перемикання між проектами з різними версіями бібліотеки

Чим відрізняється піп від конди?

На це широко відповідають всі інші.


1

pip призначений лише для Python

condaє лише для Anaconda + інших наукових пакетів, таких як залежність від R тощо. НЕ кожному потрібна Anaconda, яка вже поставляється з Python. Анаконда в основному для тих, хто займається машинним навчанням / глибоким навчанням тощо. Повсякденний розробник Python не буде запускати Анаконда на своєму ноутбуці.


просте пояснення, але мене вчили перейти безпосередньо на веб-сайт Anaconda та завантажити дистрибутив Python 2.x або 3.x. Чому? > тому що він містить усі пакунки, які знадобляться студенту. Нюмпі, Scipy, matpliotlib, sklearn тощо. Саме тому існує розрив у розумінні тонких основних деталей. Студент
Рене Дюшан

Я знаю, що це давня відповідь на даний момент, але те, що ви писали про Конду / Анаконда, здається мені абсолютно неправдивим.
AMC

0

Можливо, я знайшов ще одну різницю другорядного характеру. У мене є середовище python, /usrа не /homeбудь-яке інше. Для того, щоб встановити його, мені доведеться скористатися sudo install pip. Для мене, небажаний побічний ефект sudo install pipбув дещо інший , ніж той , що широко висвітлювалося в іншому місці: після того, як зробити це, я повинен був працювати pythonз sudo, щоб імпортувати будь-який з sudo-Встановлено пакетів. Я відмовився від цього і, врешті-решт, виявив, що можу використати sudo condaдля встановлення пакунків у середовище, в /usrяке потім нормально імпортував, не вимагаючи sudoдозволу на python. Я навіть раніше sudo condaвиправляв зламане, pipа не використовував sudo pip uninstall pipабо sudo pip --upgrade install pip.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.