Jaka jest różnica między pipem a condą?

721

Wiem, że pipjest menedżerem pakietów dla pakietów Pythona. Jednak widziałem, jak instalacja na stronie internetowej IPython używała condado instalacji IPython.

Czy mogę użyć, pipaby zainstalować IPython? Dlaczego powinienem używać condajako innego menedżera pakietów Pythona, skoro już go mam pip?

Jaka jest różnica między pipi conda?

lazywei
źródło
Czytając uważnie stronę zainstalować zobaczysz pełną instrukcję do instalacji z PIP i że conda/ enpgkjest skierowany do new users who want to get up and running with minimal effort: baldachim / Anaconda są samodzielnym environement, że nie kolidują z pytona systemu (jak venv ale większej wydajności). BTW IPyhton, nie iPython (wielka litera I)
Matt
3
Jedną różnicą jest to, że pip może instalować o wiele więcej rzeczy niż conda: pip może zainstalować wszystko z pypi w jednym poleceniu. conda wymaga trzech poleceń: szkielet, kompilacja, instalacja i ewentualnie więcej, jeśli to nie zadziała. pip może zainstalować wszystko z github lub source w jednym poleceniu. conda wymaga napisania „przepisu”, co nie jest łatwe, zwłaszcza że dokumentacja zawsze wydaje się niepoprawna / nieaktualna.
endolith
5
Powiązane pytanie: Jakie są ZALETY pip nad conda? Widzę dużo poparcia dla Anakondy poniżej, ale nic dla pip. Dlaczego pip wciąż jest standardem, skoro anakonda jest taka wspaniała?
Brian Postow
24
Uważam ten cytat oświecenie: „ Pip jest menedżer pakietów, a virtualenv jest menedżer środowisko. Conda jest zarówno”. ( ref. )
Atcold,
1
Obserwacja: Kiedyś myślałem, że conda sugeruje pobranie pakietów Zillion, ale to już nie jest prawda: możesz zainstalować minicondę, która wydaje się być po prostu menedżerem pakietów, conda.io/docs/install/quick.html
Hugh Perkins

Odpowiedzi:

520

Cytowanie z bloga Conda :

Od tak dawna związani ze światem python wszyscy jesteśmy świadomi pip, easy_install i virtualenv, ale narzędzia te nie spełniły wszystkich naszych specyficznych wymagań. Głównym problemem jest to, że koncentrują się wokół Pythona, pomijając zależności bibliotek innych niż Python, takie jak HDF5, MKL, LLVM itp., Które nie mają pliku setup.py w kodzie źródłowym, a także nie instalują plików na stronie Pythona -packages katalog.

Tak więc Conda to narzędzie do pakowania i instalator, którego celem jest zrobienie więcej niż to, co piprobi; obsługiwać zależności bibliotek poza pakietami Python, a także same pakiety Python. Conda tworzy również wirtualne środowisko, podobnie jak virtualenvrobi.

W związku z tym Conda należy porównać do Buildout , innego narzędzia, które pozwala obsługiwać zarówno zadania instalacyjne w języku Python, jak i inne niż Python.

Ponieważ Conda wprowadza nowy format opakowania, nie można używać pipi Conda zamiennie; pipnie można zainstalować formatu pakietu Conda. Możesz używać dwóch narzędzi obok siebie (instalując pipz conda install pip), ale one również nie współpracują ze sobą.

Od czasu napisania tej odpowiedzi Anaconda opublikowała nową stronę w Understanding Conda and Pip , która również to przypomina:

To podkreśla kluczową różnicę między conda i pip. Pip instaluje pakiety Pythona, podczas gdy conda instaluje pakiety, które mogą zawierać oprogramowanie napisane w dowolnym języku. Na przykład przed użyciem pipa interpreter języka Python musi zostać zainstalowany za pomocą menedżera pakietów systemowych lub poprzez pobranie i uruchomienie instalatora. Z drugiej strony Conda może bezpośrednio instalować pakiety Pythona, a także interpreter Pythona.

i dalej

Czasami potrzebny jest pakiet, który nie jest dostępny jako pakiet conda, ale jest dostępny w PyPI i można go zainstalować za pomocą pip. W takich przypadkach warto użyć zarówno conda, jak i pip.

Martijn Pieters
źródło
18
Dziękuję za wyjaśnienie. Nadal jestem jednak mylony z tym, czy Conda może zastąpić pip? tj. czy Conda może zrobić wszystko, co potrafi pip?
lazywei
10
@lazywei: Nie sądzę, że może; nie wygląda na to, że Conda obsługuje na przykład format archiwum koła. Mają różne cele.
Martijn Pieters
45
@ naught101 „Wystarczy stworzyć przepis” To nie jest tak proste jak pisanie pip install.
endolith,
23
Czy ktoś może mi wyjaśnić, co by się stało, gdybyś użył pip i conda do zainstalowania tego samego pakietu, z wyjątkiem innej wersji, której używałby Python podczas ich importowania?
Lance Ruo Zhang,
4
@jrh: nie można instalować wielu wersji tego samego pakietu obok siebie podczas korzystania z menedżera pakietów systemu operacyjnego, a nie jako podstawowej funkcji. Conda zarządza środowiskami , każde z własną mieszanką zainstalowanych pakietów w określonych wersjach. Tak więc projekt A, opracowany jakiś czas temu, może nadal przylegać do starszej wersji biblioteki Foo (brak dostępnych zasobów do uaktualnienia projektu do pracy z nowszą wersją), podczas gdy projekt B wymaga najnowszej wersji tej samej biblioteki.
Martijn Pieters
245

Oto krótkie podsumowanie:

pypeć

  • Tylko pakiety Python.
  • Kompiluje wszystko ze źródła. EDYCJA: pip instaluje teraz koła binarne, jeśli są dostępne.
  • Błogosławiony przez podstawową społeczność Python (tj. Python 3.4+ zawiera kod, który automatycznie uruchamia pip pip).

conda

  • Agnostyk Python. Istniejące pakiety koncentrują się głównie na Pythonie, a sama Conda jest napisana w Pythonie, ale możesz także mieć pakiety Conda dla bibliotek C lub R, lub cokolwiek innego.
  • Instaluje pliki binarne. Istnieje narzędzie o nazwie, conda buildktóre buduje pakiety ze źródła, ale conda installsamo instaluje rzeczy z już zbudowanych pakietów Conda.
  • Zewnętrzny. Conda jest menedżerem pakietów Anacondy, dystrybucji Pythona zapewnianej przez Continuum Analytics, ale można jej również używać poza Anacondą. Możesz go używać z istniejącą instalacją w Pythonie, instalując go za pomocą pip (choć nie jest to zalecane, chyba że masz dobry powód, aby użyć istniejącej instalacji).

W obu przypadkach:

  • Napisane w Pythonie
  • Open source (Conda to BSD, a pip to MIT)

Pierwsze dwa punkty Conda są naprawdę tym, co czyni przewagę nad pipem w przypadku wielu pakietów. Ponieważ pip instaluje się ze źródła, instalowanie go przy użyciu kodu źródłowego może być bolesne, jeśli nie można skompilować kodu źródłowego (jest to szczególnie prawdziwe w systemie Windows, ale może nawet być prawdziwe w systemie Linux, jeśli pakiety mają trudną bibliotekę C lub FORTRAN zależności). Conda instaluje się z pliku binarnego, co oznacza, że ​​ktoś (np. Continuum) wykonał już ciężką pracę przy kompilowaniu pakietu, więc instalacja jest łatwa.

Istnieją również pewne różnice, jeśli jesteś zainteresowany budowaniem własnych pakietów. Na przykład, pip jest zbudowany na setuptools, podczas gdy Conda używa własnego formatu, który ma pewne zalety (takie jak bycie statycznym i znowu agnostyk w Pythonie).

asmeurer
źródło
21
pip nie buduje już wszystkiego ze źródła. Jeśli koło jest dostępne, pip install --use-wheel <package>zainstaluje zbudowany pakiet. Zobacz tutaj: wheel.readthedocs.org/en/latest . Jednak moje osobiste doświadczenie z kołem polega na tym, że dostępnych jest tak mało naukowych pakietów kół, że jest to czysto akademickie. I oczywiście instalacja pip zwykle nie działa w systemie Windows, jeśli środowisko kompilacji nie jest skonfigurowane właściwie. W tej chwili Conda Ftw.
Caleb Hattingh
4
Koła są wciąż nowe i nie są domyślnie używane, więc nic dziwnego, że tak naprawdę nie ma ich zbyt wiele. Koło nadal pasuje do kategorii „specyficzne dla języka Python”, co oznacza, że ​​może być słabo dopasowane do pakietów innych niż Python lub pakietów Python, które zależą od pakietów innych niż Python.
asmeurer
4
Musiałem to zanotować: drugi punkt jest teraz historyczną notatką, ale ty też o tym mówisz później. Główną różnicą jest to, że pip jest menedżerem pakietów, podczas gdy conda jest bardziej menedżerem środowiska.
Shep,
9
To prawda, że ​​pip może się kompilować ze źródła, ale staje się to coraz rzadsze, gdy więcej pakietów przenosi się na koło: obecnie mogę zainstalować większość tego, czego potrzebuję, za pomocą pip. Więc to nie jest tak, że ta odpowiedź jest zła, po prostu staje się nieco nieaktualna, ponieważ pip znacznie się poprawił w ciągu ostatnich kilku lat
Shep
4
To nigdy nie było prawdą, że pip można zainstalować tylko ze źródeł. Przed kołami mieliśmy jaja jako domyślny format instalacji binarnej i zalecany format dystrybucji dla instalacji Windows, a pip instalowałby (i nadal będzie) instalował jajka, jeśli jest to najlepsza dostępna opcja.
Martijn Pieters
96

Pozostałe odpowiedzi zawierają rzetelny opis szczegółów, ale chcę podkreślić niektóre punkty wysokiego poziomu.

pip to menedżer pakietów, który ułatwia instalację, aktualizację i deinstalację pakietów python . Działa również z wirtualnymi środowiskami python .

conda to menedżer pakietów dla dowolnego oprogramowania (instalacja, aktualizacja i dezinstalacja). Działa również z wirtualnymi środowiskami systemowymi .

Jednym z celów projektowania conda jest ułatwienie zarządzania pakietami dla całego stosu oprogramowania wymaganego przez użytkowników, z których jedna lub więcej wersji Pythona może być tylko niewielką częścią. Obejmuje to biblioteki niskiego poziomu, takie jak algebra liniowa, kompilatory, takie jak mingw w systemie Windows, edytory, narzędzia kontroli wersji, takie jak Hg i Git, lub cokolwiek innego wymagającego dystrybucji i zarządzania .

W przypadku zarządzania wersjami pip umożliwia przełączanie między wieloma środowiskami Python i zarządzanie nimi .

Conda pozwala przełączać się między wieloma środowiskami ogólnego przeznaczenia i zarządzać nimi, w których wiele innych wersji może się różnić w różnych wersjach, takich jak biblioteki C, kompilatory, pakiety testowe lub silniki baz danych i tak dalej.

Conda nie jest zorientowana na system Windows, ale w systemie Windows jest zdecydowanie najlepszym rozwiązaniem dostępnym obecnie, gdy wymagane jest zainstalowanie i zarządzanie złożonymi pakietami naukowymi wymagającymi kompilacji.

Chcę płakać, gdy myślę o tym, ile czasu straciłem, próbując skompilować wiele z tych pakietów za pomocą pip w systemie Windows lub debugować nieudane pip installsesje, gdy wymagana była kompilacja.

Na koniec Continuum Analytics udostępnia także (darmową) witrynę binstar.org (obecnie anaconda.org ), aby umożliwić zwykłym twórcom pakietów tworzenie własnych niestandardowych (zbudowanych!) Pakietów oprogramowania, z których będą mogli korzystać ich użytkownicy conda install.

Caleb Hattingh
źródło
4
W końcowym punkcie zewnętrzny projekt conda-forge szybko stał się standardowym podejściem do publikowania pakietów Anaconda. Niedawno opublikowaliśmy kilka pakietów hostowanych przez Conda Forge dla naszego symulatora biologii wielofizycznej - i nie możemy wystarczająco polecić tego procesu. Istnieje komponent recenzowania oparty na PR GitHub, służący do przesyłania nowych przepisów do conda-forge, ale zalety w zakresie automatyzacji conda-forge znacznie przewyższają początkową inwestycję. Bam!
Cecil Curry
@CecilCurry Zaimportowałem Kerasdo mojego kodu, zainstalowałem anakondę na moim komputerze Mac, a Keras jest condazainstalowany i pipzainstalowany. Więc kiedy uruchamiam mój kod w terminalu, skąd mam wiedzieć, który kerasjest importowany (ten pipczy ten conda)?
KPMG
25

Aby nie mylić Cię dalej, możesz także użyć pipa w swoim środowisku conda, co potwierdza powyższe komentarze menedżerów ogólnych i pythonowych.

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

możesz również dodać pip do domyślnych pakietów dowolnego środowiska, aby był on obecny za każdym razem, więc nie musisz postępować zgodnie z powyższym fragmentem.

Vijay Venkatesh
źródło
Myślałem, że to nie jest zalecane?
endolith,
8
W pełni zalecane jest stosowanie pipa w mieszkaniu. Lepiej jest zainstalować przy użyciu conda, ale dla wszystkich pakietów, które nie mają kompilacji conda, użycie pip jest całkowicie dopuszczalne.
Bradley Kreider
2
nit: wydaje się, że to zdanie byłoby fully supported? fully recommendedsugeruje, moim zdaniem, lepiej używać pip niż conda, w środowisku conda, i nie jestem pewien, czy o to ci chodzi?
Hugh Perkins
22

Cytat z artykułu Conda for Data Science na stronie Continuum:

Conda vs. pip

Programiści Python prawdopodobnie znają pip do pobierania pakietów z PyPI i zarządzania ich wymaganiami. Chociaż zarówno conda, jak i pip są menedżerami pakietów, są one bardzo różne:

  • Pip jest specyficzny dla pakietów Pythona, a conda jest niezależna od języka, co oznacza, że ​​możemy używać conda do zarządzania pakietami z dowolnego języka Kompilacje PIP ze źródeł i pliki binarne instaluje conda, usuwając obciążenie kompilacją
  • Conda natywnie tworzy środowiska niezależne od języka, podczas gdy pip korzysta z virtualenv do zarządzania tylko środowiskami Python. Zaleca się, aby zawsze używać pakietów conda, conda zawiera także pip, więc nie musisz wybierać między tymi dwoma. Na przykład, aby zainstalować pakiet python, który nie ma pakietu conda, ale jest dostępny przez pip, po prostu uruchom na przykład:
conda install pip
pip install gensim
CheTesta
źródło
15

Cytując z Conda: Mity i nieporozumienia ( pełny opis):

...

Mit nr 3: Conda i pip są bezpośrednimi konkurentami

Rzeczywistość: Conda i pip służą różnym celom i tylko bezpośrednio konkurują w niewielkiej części zadań: instalowaniu pakietów Pythona w izolowanych środowiskach.

Pip, który oznacza P ip I nstall P Pagesages, jest oficjalnie usankcjonowanym menedżerem pakietów Pythona i jest najczęściej używany do instalowania pakietów opublikowanych w Python Package Index (PyPI). Zarówno pip, jak i PyPI są zarządzane i obsługiwane przez Python Packaging Authority (PyPA).

Krótko mówiąc, pip jest menedżerem ogólnego przeznaczenia dla pakietów Pythona; conda jest niezależnym od języka menedżerem środowiska dla wielu platform. Dla użytkownika najbardziej znaczącym rozróżnieniem jest prawdopodobnie to: pip instaluje pakiety Pythona w dowolnym środowisku; conda instaluje dowolny pakiet w środowiskach conda. Jeśli wszystko, co robisz, to instalowanie pakietów Pythona w izolowanym środowisku, conda i pip + virtualenv są w większości wymienne, modulo pewna różnica w obsłudze zależności i dostępności pakietu. Przez środowisko izolowane rozumiem conda-env lub virtualenv, w których możesz instalować pakiety bez modyfikowania systemowej instalacji Pythona.

Nawet odkładając na bok Mit nr 2, jeśli skupimy się na samej instalacji pakietów Pythona, conda i pip służą różnym odbiorcom i różnym celom. Jeśli chcesz, powiedzmy, zarządzać pakietami Python w ramach istniejącej instalacji systemowej Python, conda nie może ci pomóc: z założenia może instalować pakiety tylko w środowiskach conda. Jeśli chcesz, powiedzmy, pracować z wieloma pakietami Python, które opierają się na zewnętrznych zależnościach (NumPy, SciPy i Matplotlib są częstymi przykładami), a śledzenie tych zależności w znaczący sposób, pip nie może ci pomóc: z założenia, to zarządza pakietami Python i tylko pakietami Python.

Conda i pip nie są konkurentami, ale raczej narzędziami ukierunkowanymi na różne grupy użytkowników i wzorce użytkowania.

sancho.s ReinstateMonicaCellio
źródło
1
Nie jestem pewien, czy to prawda, poza perspektywą pozycjonowania na rynku. Na przykład spójrz na pytorch, który oferuje trzy typy instalacji: conda, pip, source, pytorch.org i zaleca: conda
Hugh Perkins
2
„Instalowanie pakietów Pythona w izolowanych środowiskach” jest jedną z głównych rzeczy, do których większość programistów Pythona używa pip.
Nick
@Nick nie jest tak, gdy programista jest już w „tym” środowisku wirtualnym? Myślę, że pip działa w środowisku wirtualnym i instaluje pakiet tak, jakby instalował się w systemie, ale jak powiedział sanchos.s, instaluje tylko pakiety Pythona i nie dba o bazowe biblioteki. proszę, popraw mnie, jeśli się mylę.
Chan Kim,
12

Dla użytkowników WINDOWS

Ostatnio poprawia się sytuacja „standardowych” narzędzi do pakowania:

  • na samym pypi jest teraz 48% pakietów kół od września. 11 2015 (wzrost z 38% w maju 2015, 24% we wrześniu 2014),

  • format koła jest teraz obsługiwany natychmiast po instalacji w każdym najnowszym pythonie 2.7.9,

Poprawia się również sytuacja „narzędzi do pakowania” „standardowych” i „poprawek”:

  • prawie wszystkie pakiety naukowe w formacie koła można znaleźć na stronie http://www.lfd.uci.edu/~gohlke/pythonlibs ,

  • Projekt mingwpy może przynieść pewnego dnia pakiet „kompilacyjny” dla użytkowników systemu Windows, umożliwiając instalację wszystkiego ze źródła w razie potrzeby.

Opakowanie „Conda” pozostaje lepsze na obsługiwanym rynku i podkreśla obszary, w których „standard” powinien ulec poprawie.

(również specyfikacja zależności wielokrotnego wysiłku, w standardowym systemie kół i systemie conda lub buildout, nie jest bardzo pythoniczna, byłoby miło, gdyby wszystkie te techniki „rdzenia” pakowania mogły się zbiegać, poprzez pewnego rodzaju PEP)

kamienny
źródło
8

pip jest menedżerem pakietów.

conda jest zarówno menedżerem pakietów, jak i menedżerem środowiska.

Szczegół:

wprowadź opis zdjęcia tutaj

Bibliografia

Simba
źródło
2

Czy mogę użyć pipa, aby zainstalować iPython?

Jasne, oba (pierwsze podejście na stronie)

pip install ipython

i (trzecie podejście, drugie to conda)

Możesz ręcznie pobrać IPython z GitHub lub PyPI. Aby zainstalować jedną z tych wersji, rozpakuj ją i uruchom następujące polecenie z katalogu źródłowego najwyższego poziomu za pomocą terminala:

pip install .

oficjalnie zalecanymi sposobami instalacji .

Dlaczego powinienem używać conda jako innego menedżera pakietów Pythona, skoro mam już pip?

Jak powiedziano tutaj :

Jeśli potrzebujesz konkretnego pakietu, może tylko dla jednego projektu lub jeśli chcesz udostępnić projekt komuś innemu, conda wydaje się bardziej odpowiednie.

Conda przewyższa pip w ( YMMV )

  • projekty korzystające z narzędzi niebędących pythonami
  • dzielenie się z kolegami
  • przełączanie między wersjami
  • przełączanie między projektami z różnymi wersjami bibliotek

Jaka jest różnica między pipem a condą?

Odpowiedzi na to szeroko udzielają wszyscy inni.

serv-inc
źródło
1

pip jest tylko dla Pythona

condadotyczy tylko Anacondy + innych pakietów naukowych, takich jak zależności R itp. NIE każdy potrzebuje Anacondy, która jest już dostarczana z Pythonem. Anaconda jest głównie dla tych, którzy uczą się maszynowego / głębokiego uczenia się itp. Przypadkowy deweloper Python nie uruchomi Anacondy na swoim laptopie.

Galapagos
źródło
proste wyjaśnienie, ale nauczono mnie, aby przejść bezpośrednio do strony internetowej Anacondy i pobrać dystrybucję Python 2.x lub 3.x. Dlaczego? > ponieważ zawiera wszystkie pakiety, których uczeń będzie potrzebował. Numpy, Scipy, matpliotlib, sklearn itp. Właśnie dlatego istnieje luka w zrozumieniu drobniejszych podstawowych szczegółów. Student
Rene Duchamp
Wiem, że to stara odpowiedź w tym momencie, ale to, co napisałeś o Conda / Anaconda, wydaje mi się całkowicie fałszywe.
AMC
0

Mogłem znaleźć jeszcze jedną różnicę o niewielkim charakterze. Mam środowiska Pythona /usrraczej niż, /homeczy cokolwiek innego. Aby go zainstalować, musiałbym użyć sudo install pip. Dla mnie niepożądany efekt uboczny sudo install pipbył nieco inny niż to, co jest powszechnie zgłaszane gdzie indziej: po zrobieniu tak, musiałem biec pythonz sudoaby zaimportować dowolny z sudoZainstalowane pakiety. Zrezygnowałem z tego i ostatecznie znalazłem, że mogę użyć sudo condado zainstalowania pakietów w środowisku, w /usrktórym następnie importowałem je normalnie bez potrzeby sudouzyskania pozwolenia python. Nawet zwykłem sudo condanaprawiać zepsuty, pipzamiast używać sudo pip uninstall piplub sudo pip --upgrade install pip.

JB
źródło