1117 Stimmen

Was ist der Unterschied zwischen pip und conda?

Ich weiß, dass pip ein Paketmanager für Python-Pakete ist. Allerdings habe ich gesehen, dass die Installation auf der Website von IPython conda verwendet, um IPython zu installieren.

Kann ich pip verwenden, um IPython zu installieren? Warum sollte ich conda als einen weiteren Python-Paketmanager verwenden, wenn ich bereits pip habe?

Was ist der Unterschied zwischen pip und conda?

746voto

Martijn Pieters Punkte 953257

Aus dem Conda-Blog zitieren:

Da wir alle schon lange in der Python-Welt tätig sind, kennen wir pip, easy_install und virtualenv, aber diese Tools erfüllen nicht alle unsere spezifischen Anforderungen. Das Hauptproblem besteht darin, dass sie sich auf Python konzentrieren und nicht-Python-Bibliotheksabhängigkeiten, wie HDF5, MKL, LLVM usw., vernachlässigen, die keine setup.py in ihrem Quellcode haben und auch keine Dateien in das site-packages-Verzeichnis von Python installieren.

Also ist Conda ein Verpackungs-Tool und Installer, das mehr tun möchte als das, was pip tut; es handhabt Bibliotheksabhängigkeiten außerhalb der Python-Pakete sowie der Python-Pakete selbst. Conda erstellt auch eine virtuelle Umgebung, ähnlich wie virtualenv es tut.

Daher sollte Conda möglicherweise mit Buildout verglichen werden, einem weiteren Tool, mit dem Sie sowohl Python- als auch nicht-Python-Installationsaufgaben handhaben können.

Weil Conda ein neues Verpackungsformat einführt, können Sie pip und Conda nicht austauschbar verwenden; pip kann das Conda-Paketformat nicht installieren. Sie können die beiden Tools nebeneinander verwenden (indem Sie pip mit conda install pip installieren), aber sie arbeiten auch nicht zusammen.

Seit der Veröffentlichung dieser Antwort hat Anaconda eine neue Seite zur Verständnis von Conda und Pip veröffentlicht, die dies ebenfalls bestätigt:

Dies verdeutlicht einen wesentlichen Unterschied zwischen conda und pip. Pip installiert Python-Pakete, während conda Pakete installiert, die Software in jeder Sprache enthalten können. Bevor pip verwendet werden kann, muss beispielsweise ein Python-Interpreter über ein System-Paketverwalter oder durch Herunterladen und Ausführen eines Installationsprogramms installiert werden. Conda hingegen kann sowohl Python-Pakete als auch den Python-Interpreter direkt installieren.

und weiter:

Gelegentlich wird ein Paket benötigt, das nicht als Conda-Paket verfügbar ist, aber 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.

305voto

asmeurer Punkte 79555

Haftungsausschluss: Diese Antwort beschreibt den Stand der Dinge vor einem Jahrzehnt, zu diesem Zeitpunkt unterstützte pip keine Binärpakete. Conda wurde speziell erstellt, um den Bau und die Verteilung von Binärpaketen, insbesondere Datenwissenschaftsbibliotheken mit C-Erweiterungen, besser zu unterstützen. Zur Referenz: Pip erhielt erst mit Version 1.4 im Jahr 2013 und der Manylinux1-Spezifikation (Pip 8.1 im März 2016) weit verbreitete Unterstützung für portable Binärpakete. Siehe die neuere Antwort für weitere Geschichte.

Hier ist eine kurze Übersicht:

pip

  • Nur Python-Pakete.
  • Kompiliert alles aus dem Quellcode. EDIT: Pip installiert jetzt auch Binärdateien, wenn sie verfügbar sind.
  • Vom Kern der Python-Community anerkannt (d.h. Python 3.4+ enthält Code, der automatisch Pip bootstrapt).

conda

  • Python-agnostisch. Der Hauptfokus der vorhandenen Pakete liegt auf Python, und tatsächlich ist Conda selbst in Python geschrieben, aber Sie können auch Conda-Pakete für C-Bibliotheken, R-Pakete oder wirklich alles Mögliche haben.
  • Installiert Binärdateien. Es gibt ein Tool namens conda build, das Pakete aus dem Quellcode erstellt, aber conda install installiert selbst Dinge aus bereits erstellten Conda-Paketen.
  • Extern. Conda ist ein Umgebungs- und Paketmanager. Es ist in der Anaconda Python-Distribution von Continuum Analytics (jetzt Anaconda, Inc.) enthalten.

Conda ist ein Umgebungsmanager, der in Python geschrieben ist und sprachenagnostisch ist. Die Funktionalitäten des Conda-Umgebungsmanagements decken die Funktionalitäten ab, die von venv, virtualenv, pipenv, pyenv und anderen Python-spezifischen Paketmanagern bereitgestellt werden. Sie könnten Conda in einer vorhandenen Python-Installation durch Pip-Installation verwenden (obwohl dies nicht empfohlen wird, es sei denn, Sie haben einen guten Grund, eine vorhandene Installation zu verwenden). Bis 2022 sind Conda und Pip nicht vollständig über die Paketverwaltungsaktivitäten innerhalb einer virtuellen Umgebung informiert, noch sind sie interoperabel für die Python-Paketverwaltung.

In beiden Fällen:

  • In Python geschrieben
  • Open-Source (Conda ist BSD und Pip ist MIT)
  • Warnung: Obwohl Conda selbst Open Source ist, werden die Paket-Repositories von Anaconda Inc gehostet und unterliegen Einschränkungen hinsichtlich der kommerziellen Nutzung.

Die ersten beiden Punkte von Conda sind wirklich das, was es für viele Pakete vorteilhaft gegenüber Pip macht. Da Pip aus dem Quellcode installiert, kann es schmerzhaft sein, Dinge damit zu installieren, wenn Sie nicht in der Lage sind, den Quellcode zu kompilieren (das gilt insbesondere für Windows, kann aber sogar auf Linux wahr sein, wenn die Pakete einige schwierige C- oder FORTRAN-Bibliotheksabhängigkeiten haben). Conda installiert aus Binärdateien, was bedeutet, dass jemand (z.B. Continuum) bereits die mühsame Arbeit der Kompilierung des Pakets erledigt hat, und so ist die Installation einfach.

Es gibt auch einige Unterschiede, wenn Sie daran interessiert sind, Ihre eigenen Pakete zu erstellen. Zum Beispiel basiert Pip auf setuptools, während Conda sein eigenes Format verwendet, das einige Vorteile hat (wie statisch zu sein und erneut sprachagnostisch zu sein).

119voto

Caleb Hattingh Punkte 8586

Die anderen Antworten geben eine faire Beschreibung der Details, aber ich möchte einige wichtige Punkte hervorheben.

pip ist ein Paketmanager, der die Installation, das Upgrade und die Deinstallation von python packages erleichtert. Er funktioniert auch mit virtuellen python-Umgebungen.

conda ist ein Paketmanager für beliebige Software (Installation, Upgrade und Deinstallation). Er funktioniert auch mit virtuellen System-Umgebungen.

Eines der Ziele bei der Gestaltung von conda besteht darin, das Paketmanagement für den gesamten Software-Stack zu erleichtern, der von Benutzern benötigt wird, von dem eine oder mehrere Python-Versionen nur einen kleinen Teil ausmachen können. Dazu gehören Low-Level-Bibliotheken wie lineare Algebra, Compiler wie mingw unter Windows, Editoren, Versionsverwaltungstools wie Hg und Git oder was auch immer sonst Verbreitung und Verwaltung erfordert.

Für die Versionsverwaltung ermöglicht pip das Umschalten zwischen und Verwalten mehrerer python-Umgebungen.

Conda ermöglicht das Umschalten zwischen und Verwalten von vielen allgemeinen Umgebungen, in denen sich viele andere Dinge in der Versionsnummer unterscheiden können, wie C-Bibliotheken, Compiler, Test-Suiten, Datenbank-Engines und so weiter.

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

Es bricht mir das Herz, wenn ich daran denke, wie viel Zeit ich damit verloren habe, viele dieser Pakete über pip unter Windows zu kompilieren oder fehlgeschlagene pip install-Sitzungen zu debuggen, wenn eine Kompilierung erforderlich war.

Als abschließender Punkt hostet Continuum Analytics auch (kostenlos) binstar.org (jetzt anaconda.org), um regulären Paketentwicklern zu ermöglichen, ihre eigenen benutzerdefinierten (gebauten!) Software-Stacks zu erstellen, die ihre Paketbenutzer mittels conda install installieren können.

59voto

user5994461 Punkte 3652

(2021 AKTUALISIERUNG)

TL;DR Verwenden Sie pip, es ist der offizielle Paketmanager seit Python 3.

pip

  • Grundlagen

  • pip ist der Standard-Paketmanager für Python.

  • pip ist ab Python 3.0 integriert.

  • Verwendung: python3 -m venv myenv; quelle myenv/bin/activate; python3 -m pip install requests

  • Pakete werden von pypi.org heruntergeladen, dem offiziellen öffentlichen Python-Repository.

  • Es kann vorcompilierte Binärdateien (Wheels) installieren, wenn verfügbar, oder Quellcode (tar/zip-Archiv).

  • Kompilierte Binärdateien sind wichtig, da viele Pakete gemischten Python/C/andere mit Drittanbieterabhängigkeiten und komplexen Build-Chains sind. Sie MÜSSEN als Binärdateien verteilt werden, um sofort einsatzbereit zu sein.

  • Fortschrittlich

  • pip kann tatsächlich aus einem beliebigen Archiv, Wheel oder Git/SVN-Repo installieren...

  • ... das auf der Festplatte, einer HTTP-URL oder einem persönlichen PyPi-Server zu finden ist.

  • pip install git+https://github.com/psf/requests.git@v2.25.0 zum Beispiel (es kann nützlich sein, um Patches auf einem Branch zu testen).

  • pip install https://download.pytorch.org/whl/cpu/torch-1.9.0%2Bcpu-cp39-cp39-linux_x86_64.whl (dieses Wheel ist Python 3.9 auf Linux).

  • Beim Installieren aus dem Quellcode wird pip das Paket automatisch erstellen. (Das ist nicht immer möglich, versuchen Sie, TensorFlow ohne das Google-Build-System zu kompilieren :D)

  • Binäre Wheels können pythonversions- und betriebssystemspezifisch sein. Siehe manylinux Spezifikation, um die Portabilität zu maximieren.

conda

  • Sie dürfen Anaconda oder Pakete aus Anaconda-Repositories nicht für kommerzielle Zwecke nutzen, es sei denn, Sie erwerben eine Lizenz.

  • Conda ist ein Paketmanager von Drittanbietern von Conda.

  • Es wird von Anaconda popularisiert, einer Python-Distribution, die die gängigsten Data-Science-Bibliotheken ready-to-use enthält.

  • Sie verwenden conda, wenn Sie Anaconda verwenden.

  • Pakete werden von dem Anaconda-Repo heruntergeladen.

  • Es installiert nur vorcompilierte Pakete.

  • Conda hat sein eigenes Format für Pakete. Es verwendet keine Wheels.

  • conda install zum Installieren eines Pakets.

  • conda build zum Erstellen eines Pakets.

  • Conda kann den Python-Interpreter erstellen (und andere C-Pakete, von denen er abhängt). So wird ein Interpreter gebaut und gebündelt für Anaconda.

  • Conda ermöglicht die Installation und Aktualisierung des Python-Interpreters (was pip nicht kann).

  • Fortschrittlich

  • Das Verkaufsargument von Conda war historisch gesehen die Unterstützung beim Erstellen und Installieren von Binärpaketen, weil pip Binärpakete nicht gut unterstützte (bis Wheels und manylinux2010 spezifikation).

  • Betonung auf dem Erstellen von Paketen. Conda verfügt über umfangreiche Build-Einstellungen und speichert umfangreiche Metadaten, um mit Abhängigkeiten und Build-Chains zu arbeiten.

  • Einige Projekte verwenden Conda, um komplexe Build-Systeme zu initialisieren und ein Wheel zu generieren, das dann an pypi.org für pip veröffentlicht wird.

easy_install/egg

  • Nur für historische Referenzzwecke. NICHT VERWENDEN
  • egg ist ein verworfenes Paketformat, das bis Mitte der 2010er Jahre verwendet wurde und vollständig durch Wheels ersetzt wurde.
  • Ein Egg ist ein Zip-Archiv, das Python-Quellcodedateien und/oder kompilierte Bibliotheken enthält.
  • Eggs werden mit easy_install und den ersten Versionen von pip verwendet.
  • easy_install war ein weiterer Paketmanager, der pip und conda vorausging. Er wurde in setuptools v58.3 (Jahr 2021) entfernt.
  • Es hat auch viel Verwirrung gestiftet, ähnlich wie pip vs conda :D
  • Egg-Dateien sind langsam zu laden, schlecht spezifiziert und betriebssystemspezifisch.
  • Jedes Egg wurde in einem separaten Verzeichnis eingerichtet, ein import mypackage hätte nach mypackage.py in potenziell Hunderten von Verzeichnissen suchen müssen (wie viele Bibliotheken waren installiert?). Das war langsam und nicht benutzerfreundlich für den Dateisystemcache.

Historisch gesehen waren die oben genannten drei Tools Open-Source und in Python geschrieben. Das Unternehmen hinter Conda aktualisierte jedoch 2020 seine Nutzungsbedingungen, um die kommerzielle Nutzung zu verbieten, Vorsicht!

Funfact: Die einzige zwingend erforderliche Abhängigkeit zum Erstellen des Python-Interpreters ist zlib (eine Zip-Bibliothek), da die Kompression erforderlich ist, um weitere Pakete zu laden. Egg- und Wheel-Pakete sind Zip-Dateien.

Warum so viele Optionen?

Ein gute Frage.

Lassen Sie uns in die Geschichte von Python und Computern eintauchen. =D

Reine Python-Pakete haben immer gut mit jedem dieser Paketierer funktioniert. Die Probleme traten bei nicht nur Python-Paketen auf.

Der Großteil des Codes in der Welt hängt von C ab. Das gilt für den Python-Interpreter, der in C geschrieben ist. Das gilt für zahlreiche Python-Pakete, die Python-Wrapper um C-Bibliotheken oder Projekte sind, die Python/C/C++-Code mischen.

Alles, was SSL, Komprimierung, GUI (X11 und Windows-Subsysteme), Mathematikbibliotheken, GPU, CUDA, usw. betrifft, ist typischerweise mit etwas C-Code gekoppelt.

Dies führt zu Problemen beim Paketieren und Verteilen von Python-Bibliotheken, weil es sich nicht nur um Python-Code handelt, der überall ausgeführt werden kann. Die Bibliothek muss kompiliert werden, die Kompilierung erfordert Compiler und Systembibliotheken und Drittanbieterbibliotheken, dann, sobald sie kompiliert ist, funktioniert der generierte Binärcode nur für das spezifische System und die Python-Version, auf der er kompiliert wurde.

Ursprünglich konnte Python problemlos reine Python-Bibliotheken verteilen, aber es gab wenig Unterstützung für die Verteilung von Binärbibliotheken. In und um 2010 herum gab es viele Fehler beim Versuch, numpy oder cassandra zu verwenden. Es wurde der Quellcode heruntergeladen und konnte nicht kompiliert werden, aufgrund fehlender Abhängigkeiten. Oder es wurde ein vorcompiliertes Paket heruntergeladen (vielleicht eine Egg zu der Zeit) und es stürzte mit einem SEGFAULT ab, wenn es verwendet wurde, weil es für ein anderes System erstellt wurde. Es war ein Albtraum.

Dies wurde durch pip und Wheels ab 2012 gelöst. Dann warteten viele Jahre darauf, dass Entwickler die Tools übernehmen und dass die Tools in stabile Linux-Distributionen übernommen wurden (viele Entwickler verlassen sich auf /usr/bin/python). Die Probleme mit Binärpaketen erstreckten sich bis in die späten 2010er Jahre.

Zur Erinnerung: Deshalb ist der erste Befehl, der ausgeführt wird, python3 -m venv myvenv && quelle myvenv/bin/activate && pip install --upgrade pip setuptools in veralteten Systemen, weil das Betriebssystem mit einem alten Python+pip von vor 5 Jahren geliefert wird, das fehlerhaft ist und das aktuelle Paketformat nicht erkennen kann.

Conda arbeitete parallel an ihrer eigenen Lösung. Anaconda war speziell darauf ausgerichtet, Data Science-Bibliotheken out-of-the-box einfach zu verwenden (Data Science = überall C und C++), daher mussten sie einen Paketmanager entwickeln, der speziell zum Erstellen und Verteilen von Binärbibliotheken vorgesehen war, Conda.

Wenn Sie heute ein Paket mit pip install xxx installieren, funktioniert es einfach. Das ist die empfohlene Methode zur Installation von Paketen und sie ist in aktuellen Versionen von Python integriert.

35voto

vijay venkatesh Punkte 351

Um Sie nicht weiter zu verwirren, können Sie auch pip innerhalb Ihrer conda-Umgebung verwenden, was die allgemeinen gegenüber den Python-spezifischen Manager-Kommentaren oben bestätigt.

conda install -n testenv pip
quelle aktivieren testenv
pip 

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X