Was ist der Unterschied zwischen Pip und Conda?

722

Ich weiß, pipist ein Paketmanager für Python-Pakete. Ich habe jedoch gesehen, dass die Installation auf der IPython-Website condazur Installation von IPython verwendet wurde.

Kann ich pipIPython installieren? Warum sollte ich condaals anderer Python-Paketmanager verwenden, wenn ich bereits habe pip?

Was ist der Unterschied zwischen pipund conda?

Lazywei
quelle
Sorgfältig die Lese installieren Seite Sie werden sehen voll Anweisung mit Pip und installieren conda/ enpgkzu ausgerichtet ist new users who want to get up and running with minimal effort: Baldachin / anaconda sind eigenständige environement, die mit System Python (wie Venv aber mächtiger) nicht stören. Übrigens IPyhton, nicht iPython (Großbuchstabe I)
Matt
3
Ein Unterschied besteht darin, dass von pip viel mehr Dinge installiert werden können als von conda: pip kann alles von pypi in einem Befehl installieren. conda erfordert drei Befehle: Skelett, Erstellen, Installieren und möglicherweise mehr, wenn dies nicht funktioniert. pip kann alles von github oder source in einem Befehl installieren. conda erfordert das Schreiben eines "Rezepts", was nicht einfach ist, zumal die Dokumentation immer falsch / veraltet zu sein scheint.
Endolith
5
Verwandte Frage: Was sind die VORTEILE von pip over conda? Ich sehe unten viele Anaconda-Befürworter, aber nichts für Pip. Warum ist Pip immer noch der Standard, wenn Anaconda so großartig ist?
Brian Postow
24
Ich finde dieses Zitat aufschlussreich: " Pip ist ein Paketmanager und Virtualenv ist ein Umgebungsmanager. Conda ist beides." ( Ref. )
Atcold
1
Beobachtung: Früher dachte ich, Conda impliziere das Herunterladen von zig Paketen, aber das stimmt anscheinend nicht mehr: Sie können Miniconda installieren, das im Wesentlichen nur der Paketmanager zu sein scheint: conda.io/docs/install/quick.html
Hugh Perkins

Antworten:

520

Zitat aus dem Conda-Blog :

Nachdem wir uns so lange mit der Python-Welt beschäftigt haben, kennen wir alle pip, easy_install und virtualenv, aber diese Tools haben nicht alle unsere spezifischen Anforderungen erfüllt. Das Hauptproblem besteht darin, dass sie sich auf Python konzentrieren und Abhängigkeiten von Nicht-Python-Bibliotheken wie HDF5, MKL, LLVM usw. vernachlässigen, deren Quellcode keine setup.py enthält und die auch keine Dateien auf der Python-Site installieren -packages Verzeichnis.

Conda ist also ein Verpackungswerkzeug und ein Installationsprogramm, das mehr als nur das tun pipsoll. Behandeln Sie Bibliotheksabhängigkeiten außerhalb der Python-Pakete sowie der Python-Pakete selbst. Conda erstellt auch eine virtuelle Umgebung virtualenv.

Daher sollte Conda möglicherweise mit Buildout verglichen werden , einem anderen Tool, mit dem Sie sowohl Python- als auch Nicht-Python-Installationsaufgaben ausführen können.

Da Conda ein neues Verpackungsformat einführt, können Sie pipConda nicht austauschbar verwenden. pipDas Conda-Paketformat kann nicht installiert werden. Sie können die beiden Tools nebeneinander verwenden (durch Installation pipmit conda install pip), sie funktionieren jedoch auch nicht zusammen.

Seit Anaconda diese Antwort geschrieben hat, hat sie eine neue Seite über das Verständnis von Conda und Pip veröffentlicht , die dies ebenfalls wiederholt:

Dies unterstreicht einen wesentlichen Unterschied zwischen Conda und Pip. Pip installiert Python-Pakete, während conda Pakete installiert, die möglicherweise Software enthalten, die in einer beliebigen Sprache geschrieben ist. Vor der Verwendung von pip muss beispielsweise ein Python-Interpreter über einen Systempaket-Manager oder durch Herunterladen und Ausführen eines Installationsprogramms installiert werden. Conda hingegen kann Python-Pakete sowie den Python-Interpreter direkt installieren.

und weiter

Gelegentlich wird ein Paket benötigt, das nicht als Conda-Paket verfügbar ist, sondern auf PyPI verfügbar ist und mit pip installiert werden kann. In diesen Fällen ist es sinnvoll, sowohl Conda als auch Pip zu verwenden.

Martijn Pieters
quelle
18
Danke für Ihre Erklärung. Ich bin jedoch immer noch verwirrt, ob Conda Pip ersetzen kann. Kann Conda also alles tun, was Pip kann?
Lazywei
10
@lazywei: Ich glaube nicht, dass es kann; Es sieht nicht so aus, als würde Conda beispielsweise das Radarchivformat unterstützen. Sie haben unterschiedliche Ziele.
Martijn Pieters
45
@ naught101 "Erstelle einfach ein Rezept" Das ist nicht so einfach wie das Tippen pip install.
Endolith
23
Können mir einige erklären, was passieren würde, wenn Sie pip und conda verwenden würden, um dasselbe Paket zu installieren, außer mit einer anderen Version, die Python beim Importieren verwenden würde?
Lance Ruo Zhang
4
@jrh: Sie können nicht mehrere Versionen desselben Pakets nebeneinander installieren, wenn Sie den OS-Paketmanager verwenden, nicht als Kernfunktion. Conda verwaltet Umgebungen mit jeweils eigenen Mixen installierter Pakete in bestimmten Versionen. Das vor einiger Zeit entwickelte Projekt A kann sich also weiterhin an eine ältere Version der Bibliothek Foo halten (es sind keine Ressourcen verfügbar, um das Projekt auf eine neuere Version zu aktualisieren), während für Projekt B die neueste Version derselben Bibliothek erforderlich ist.
Martijn Pieters
246

Hier ist ein kurzer Überblick:

Pip

  • Nur Python-Pakete.
  • Kompiliert alles aus dem Quellcode. BEARBEITEN: pip installiert jetzt binäre Räder, falls verfügbar.
  • Gesegnet von der Kern-Python-Community (dh Python 3.4+ enthält Code, der pip automatisch bootet).

conda

  • Python-Agnostiker. Das Hauptaugenmerk bestehender Pakete liegt auf Python, und tatsächlich ist Conda selbst in Python geschrieben, aber Sie können auch Conda-Pakete für C-Bibliotheken oder R-Pakete oder wirklich alles haben.
  • Installiert Binärdateien. Es gibt ein Tool namens conda build, das Pakete aus dem Quellcode erstellt, aber conda installselbst Dinge aus bereits erstellten Conda-Paketen installiert.
  • Extern. Conda ist der Paketmanager von Anaconda, der Python-Distribution von Continuum Analytics, kann aber auch außerhalb von Anaconda verwendet werden. Sie können es mit einer vorhandenen Python-Installation verwenden, indem Sie es per Pip installieren (dies wird jedoch nicht empfohlen, es sei denn, Sie haben einen guten Grund, eine vorhandene Installation zu verwenden).

In beiden Fällen:

  • Geschrieben in Python
  • Open Source (Conda ist BSD und pip ist MIT)

Die ersten beiden Aufzählungspunkte von Conda machen es für viele Pakete wirklich vorteilhaft gegenüber Pip. Da pip vom Quellcode aus installiert wird, kann es schmerzhaft sein, Dinge damit zu installieren, wenn Sie den Quellcode nicht kompilieren können (dies gilt insbesondere für Windows, aber auch für Linux, wenn die Pakete eine schwierige C- oder FORTRAN-Bibliothek haben Abhängigkeiten). Conda wird über Binärdateien installiert, was bedeutet, dass bereits jemand (z. B. Continuum) die harte Arbeit beim Kompilieren des Pakets geleistet hat, sodass die Installation einfach ist.

Es gibt auch einige Unterschiede, wenn Sie daran interessiert sind, Ihre eigenen Pakete zu erstellen. Zum Beispiel basiert pip auf Setuptools, während Conda ein eigenes Format verwendet, das einige Vorteile hat (wie statisch zu sein und wieder Python-Agnostiker).

asmeurer
quelle
21
pip baut nicht mehr alles aus der Quelle. Wenn ein Rad verfügbar ist, pip install --use-wheel <package>wird ein gebautes Paket installiert. Siehe hier: Wheel.readthedocs.org/en/latest . Meine persönliche Erfahrung mit Rädern ist jedoch, dass so wenige wissenschaftliche Radpakete verfügbar sind, dass es rein akademisch ist. Und natürlich funktioniert die Pip-Installation auch unter Windows meistens nicht, wenn Ihre Build-Umgebung nicht genau richtig eingerichtet ist. Also im Moment conda ftw.
Caleb Hattingh
4
Räder sind noch neu und werden nicht standardmäßig verwendet. Daher ist es nicht verwunderlich, dass es noch nicht wirklich viele davon gibt. Wheel passt jedoch immer noch in die Kategorie "Python-spezifisch", was bedeutet, dass es möglicherweise nicht für Nicht-Python-Pakete oder Python-Pakete geeignet ist, die von Nicht-Python-Paketen abhängen.
Asmeurer
4
Ich musste dies ablehnen: Der zweite Punkt ist jetzt nur eine historische Anmerkung, aber Sie gehen später auch darauf ein. Der Hauptunterschied heutzutage ist, dass pip ein Paketmanager ist, während conda eher ein Umweltmanager ist.
Shep
9
Es ist wahr, dass pip aus dem Quellcode kompiliert werden kann, aber dies wird immer seltener, wenn mehr Pakete auf das Rad verschoben werden: Heutzutage kann ich das meiste, was ich brauche, in wenigen Sekunden mit pip installieren. Es ist also nicht so, dass diese Antwort falsch ist, sie wird nur leicht veraltet, da sich Pip in den letzten Jahren ziemlich verbessert hat
Shep
4
Es war noch nie so, dass pip nur von der Quelle installiert werden kann. Vor den Rädern hatten wir Eier als Standardformat für die binäre Installation und das empfohlene Verteilungsformat für Windows-Installationen, und pip würde (und wird) Eier installieren, wenn dies die beste verfügbare Option ist.
Martijn Pieters
96

Die anderen Antworten geben eine angemessene Beschreibung der Details, aber ich möchte einige Punkte auf hoher Ebene hervorheben.

pip ist ein Paketmanager, der die Installation, Aktualisierung und Deinstallation von Python-Paketen erleichtert . Es funktioniert auch mit virtuellen Python- Umgebungen.

conda ist ein Paketmanager für jede Software (Installation, Aktualisierung und Deinstallation). Es funktioniert auch mit virtuellen Systemumgebungen .

Eines der Ziele beim Design von conda ist die Erleichterung der Paketverwaltung für den gesamten von Benutzern benötigten Software-Stack, von dem eine oder mehrere Python-Versionen möglicherweise nur einen kleinen Teil ausmachen. Dies umfasst Bibliotheken auf niedriger Ebene wie lineare Algebra, Compiler wie mingw unter Windows, Editoren, Tools zur Versionskontrolle wie Hg und Git oder alles , was sonst noch Verteilung und Verwaltung erfordert .

Für die Versionsverwaltung können Sie mit pip zwischen mehreren Pythons wechseln und diese verwalten Umgebungen .

Mit Conda können Sie zwischen mehreren Allzweckumgebungen wechseln und diese verwalten in denen die Versionsnummer mehrerer anderer Dinge variieren kann, z. B. C-Bibliotheken, Compiler, Testsuiten, Datenbankmodule usw.

Conda ist nicht Windows-zentriert, aber unter Windows ist es bei weitem die überlegene Lösung, die derzeit verfügbar ist, wenn komplexe wissenschaftliche Pakete, die kompiliert werden müssen, installiert und verwaltet werden müssen.

Ich möchte weinen, wenn ich daran denke, wie viel Zeit ich beim Versuch verloren habe, viele dieser Pakete über pip unter Windows zu kompilieren, oder fehlgeschlagene pip installSitzungen zu debuggen , wenn eine Kompilierung erforderlich war.

Als letzter Punkt, Continuum Analytics auch Gastgeber (kostenlos) binstar.org (heute anaconda.org ) regelmäßige Paket , damit Entwickler ihre eigenen erstellen (gebaut!) Software - Stacks , dass ihr Paket-Benutzer in der Lage sein wird, conda installaus.

Caleb Hattingh
quelle
4
Per Ihrem letzten Punkt, die von Drittanbietern Conda-Schmiede - Projekt hat mich schnell der Industrie-Standard - Ansatz zur Veröffentlichung Anaconda Pakete wird. Wir haben kürzlich mehrere von Conda-Forge gehostete Pakete für unseren Multiphysik-Biologie-Simulator veröffentlicht - und können den Prozess nicht genug empfehlen. Es gibt eine auf GitHub PR basierende Peer-Review-Komponente, mit der neue Rezepte bei conda-forge eingereicht werden können. Die Vorteile in Bezug auf die Automatisierung von conda-forge überwiegen jedoch erheblich die Zeitinvestition im Voraus. Bam!
Cecil Curry
@CecilCurry Ich habe Kerasin meinen Code importiert , Anaconda auf meinem Mac condainstalliert und Keras ist sowohl installiert als auch pipinstalliert. Woher weiß ich beim Ausführen meines Codes im Terminal, welcher Code kerasimportiert wird (der pipeine oder der condaeine)?
KPMG
25

Um Sie nicht weiter zu verwirren, können Sie Pip auch in Ihrer Conda-Umgebung verwenden, wodurch die obigen allgemeinen und pythonspezifischen Manager-Kommentare überprüft werden.

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

Sie können Pip auch zu Standardpaketen jeder Umgebung hinzufügen, damit es jedes Mal vorhanden ist, damit Sie dem obigen Snippet nicht folgen müssen.

vijay venkatesh
quelle
Ich dachte das wäre nicht zu empfehlen?
Endolith
8
Es wird dringend empfohlen, Pip innerhalb der Wohnung zu verwenden. Es ist besser, mit conda zu installieren, aber für alle Pakete, die keinen conda-Build haben, ist es durchaus akzeptabel, pip zu verwenden.
Bradley Kreider
2
nit: scheint der Satz zu sein fully supported? fully recommendedimpliziert, dass es meiner Meinung nach besser ist, pip als conda innerhalb einer conda-Umgebung zu verwenden, und ich bin mir nicht sicher, ob Sie das meinen?
Hugh Perkins
22

Zitat aus dem Artikel von Conda for Data Science auf der Website von Continuum:

Conda gegen Pip

Python-Programmierer sind wahrscheinlich mit pip vertraut, um Pakete von PyPI herunterzuladen und ihre Anforderungen zu verwalten. Obwohl sowohl conda als auch pip Paketmanager sind, sind sie sehr unterschiedlich:

  • Pip ist spezifisch für Python-Pakete und conda ist sprachunabhängig. Dies bedeutet, dass wir conda verwenden können, um Pakete aus jeder Sprache zu verwalten. Pip kompiliert aus dem Quellcode und conda installiert Binärdateien, wodurch die Kompilierungslast entfällt
  • Conda erstellt nativ sprachunabhängige Umgebungen, während pip auf virtualenv angewiesen ist, um nur Python-Umgebungen zu verwalten. Obwohl empfohlen wird, immer Conda-Pakete zu verwenden, enthält Conda auch Pip, sodass Sie nicht zwischen beiden wählen müssen. Um beispielsweise ein Python-Paket zu installieren, das kein Conda-Paket enthält, aber über pip verfügbar ist, führen Sie einfach Folgendes aus:
conda install pip
pip install gensim
CheTesta
quelle
15

Zitat aus Conda: Mythen und Missverständnisse (eine umfassende Beschreibung):

...

Mythos Nr. 3: Conda und Pip sind direkte Konkurrenten

Realität: Conda und Pip dienen unterschiedlichen Zwecken und konkurrieren nur direkt in einer kleinen Teilmenge von Aufgaben: der Installation von Python-Paketen in isolierten Umgebungen.

Pip, das steht für P ip I nstalls P ackages steht, ist Pythons offiziell genehmigter Paketmanager und wird am häufigsten zum Installieren von Paketen verwendet, die im Python Package Index (PyPI) veröffentlicht sind. Sowohl pip als auch PyPI werden von der Python Packaging Authority (PyPA) verwaltet und unterstützt.

Kurz gesagt, pip ist ein Allzweckmanager für Python-Pakete. conda ist ein sprachunabhängiger plattformübergreifender Umgebungsmanager. Für den Benutzer ist der wichtigste Unterschied wahrscheinlich folgender: pip installiert Python-Pakete in jeder Umgebung; conda installiert jedes Paket in conda-Umgebungen. Wenn Sie lediglich Python-Pakete in einer isolierten Umgebung installieren, sind conda und pip + virtualenv größtenteils austauschbar, wobei sich die Abhängigkeitsbehandlung und die Paketverfügbarkeit unterscheiden. Mit isolierter Umgebung meine ich eine conda-env oder virtualenv, in der Sie Pakete installieren können, ohne die Python-Installation Ihres Systems zu ändern.

Selbst wenn wir Mythos Nr. 2 beiseite lassen, dienen conda und pip unterschiedlichen Zielgruppen und unterschiedlichen Zwecken, wenn wir uns nur auf die Installation von Python-Paketen konzentrieren. Wenn Sie beispielsweise Python-Pakete in einer vorhandenen Python-Systeminstallation verwalten möchten, kann conda Ihnen nicht helfen: Von Natur aus kann es nur Pakete in conda-Umgebungen installieren. Wenn Sie beispielsweise mit den vielen Python-Paketen arbeiten möchten, die auf externen Abhängigkeiten basieren (NumPy, SciPy und Matplotlib sind gängige Beispiele), und pip diese Abhängigkeiten auf sinnvolle Weise verfolgen möchten, kann pip Ihnen nicht helfen: verwaltet Python-Pakete und nur Python-Pakete.

Conda und Pip sind keine Konkurrenten, sondern Tools, die sich auf verschiedene Benutzergruppen und Nutzungsmuster konzentrieren.

sancho.s ReinstateMonicaCellio
quelle
1
Ich bin mir nicht sicher, ob dies wirklich wahr ist, jenseits einer Marktpositionierungsperspektive. Schauen Sie sich zum Beispiel pytorch an, das drei Arten der Installation bietet: conda, pip, source, pytorch.org und empfiehlt: conda
Hugh Perkins
2
"Installieren von Python-Paketen in isolierten Umgebungen" ist die Hauptsache, für die die meisten Python-Entwickler pip verwenden.
Nick
@Nick ist es nicht, wenn sich der Entwickler bereits in dieser virtuellen Umgebung befindet? Ich denke, pip funktioniert in einer virtuellen Umgebung und installiert das Paket so, als würde es für ein System installiert. Aber wie sanchos.s sagte, installiert es nur Python-Pakete und kümmert sich nicht um die zugrunde liegenden Bibliotheken. jemand bitte korrigiert mich, wenn ich falsch liege.
Chan Kim
12

Für WINDOWS-Benutzer

Die Situation mit "Standard" -Verpackungswerkzeugen verbessert sich in letzter Zeit:

  • Auf Pypi selbst gibt es ab September 48% der Radpakete. 11. 2015 (gegenüber 38% im Mai 2015, 24% im September 2014),

  • Das Wheel-Format wird jetzt standardmäßig gemäß Python 2.7.9 unterstützt.

Die Situation bei "Standard" + "Tweaks" -Verpackungswerkzeugen verbessert sich ebenfalls:

  • Sie finden fast alle wissenschaftlichen Pakete im Radformat unter http://www.lfd.uci.edu/~gohlke/pythonlibs ,

  • Das Mingwpy-Projekt bietet Windows-Benutzern möglicherweise eines Tages ein Kompilierungspaket, mit dem bei Bedarf alles von der Quelle installiert werden kann.

"Conda" -Verpackungen bleiben für den Markt, den sie bedienen, besser und zeigen Bereiche auf, in denen sich der "Standard" verbessern sollte .

(Auch die Abhängigkeitsspezifikation mit mehreren Anstrengungen im Standard-Radsystem und im Conda-System oder im Buildout ist nicht sehr pythonisch. Es wäre schön, wenn alle diese „Kern“ -Techniken der Verpackung über eine Art PEP konvergieren könnten.)

Stonebig
quelle
8

pip ist ein Paketmanager.

conda ist sowohl ein Paketmanager als auch ein Umgebungsmanager.

Detail:

Geben Sie hier die Bildbeschreibung ein

Verweise

Simba
quelle
2

Kann ich mit iP iPython installieren?

Klar, beides (erster Ansatz auf Seite)

pip install ipython

und (dritter Ansatz, zweiter ist conda)

Sie können IPython manuell von GitHub oder PyPI herunterladen. Um eine dieser Versionen zu installieren, entpacken Sie sie und führen Sie Folgendes über das Terminal aus dem Quellverzeichnis der obersten Ebene aus:

pip install .

sind offiziell empfohlene Möglichkeiten zur Installation .

Warum sollte ich conda als einen anderen Python-Paketmanager verwenden, wenn ich bereits pip habe?

Wie hier gesagt :

Wenn Sie ein bestimmtes Paket benötigen, möglicherweise nur für ein Projekt, oder wenn Sie das Projekt mit einer anderen Person teilen müssen, erscheint conda angemessener.

Conda übertrifft Pip in ( YMMV )

  • Projekte, die Nicht-Python-Tools verwenden
  • mit Kollegen teilen
  • zwischen Versionen wechseln
  • Wechseln zwischen Projekten mit unterschiedlichen Bibliotheksversionen

Was ist der Unterschied zwischen Pip und Conda?

Das wird von allen anderen ausführlich beantwortet.

serv-inc
quelle
1

pip ist nur für Python

condaist nur für Anaconda + andere wissenschaftliche Pakete wie R-Abhängigkeiten usw. NICHT jeder braucht Anaconda, das bereits mit Python geliefert wird. Anaconda ist hauptsächlich für diejenigen gedacht, die maschinelles Lernen / Deep Learning usw. betreiben. Gelegenheits-Python-Entwickler führen Anaconda nicht auf seinem Laptop aus.

Galapagos
quelle
einfache Erklärung, aber mir wurde beigebracht, direkt auf die Website von Anaconda zu gehen und die Python 2.x- oder 3.x-Distribution herunterzuladen. Warum? > weil es alle Pakete enthält, die ein Schüler benötigt. Numpy, Scipy, matpliotlib, sklearn usw. Genau deshalb gibt es eine Lücke im Verständnis der feineren grundlegenden Details. Student
Rene Duchamp
Ich weiß, dass dies zu diesem Zeitpunkt eine alte Antwort ist, aber was Sie über Conda / Anaconda geschrieben haben, scheint mir völlig falsch zu sein.
AMC
0

Möglicherweise habe ich einen weiteren geringfügigen Unterschied festgestellt. Ich habe meine Python-Umgebungen /usreher unter als /homeoder was auch immer. Um es zu installieren, müsste ich verwenden sudo install pip. Für mich ist die unerwünschte Nebenwirkung sudo install pipwar etwas anders als das, was an anderer Stelle ausführlich berichtet: Nach so tun, ich laufen musste pythonmit , sudoum eine der zu importierenden sudo-Installierte Pakete. Ich gab das auf und stellte schließlich fest, dass ich sudo condaPakete in einer Umgebung installieren konnte, unter /usrder sie dann normal importiert wurden, ohne dass eine sudoErlaubnis dafür erforderlich war python. Ich habe sogar sudo condaeinen Defekt behoben, pipanstatt sudo pip uninstall pipoder zu verwenden sudo pip --upgrade install pip.

JB
quelle