Sollte conda oder conda-forge für Python-Umgebungen verwendet werden?

127

Condaund conda-forgesind beide Python-Paketmanager. Was ist die richtige Wahl, wenn in beiden Repositorys ein Paket vorhanden ist? Django kann zum Beispiel mit beiden installiert werden, aber der Unterschied zwischen den beiden besteht in mehreren Abhängigkeiten (conda-forge hat viel mehr). Es gibt keine Erklärung für diese Unterschiede, nicht einmal eine einfache README.

Welches sollte verwendet werden? Conda oder Conda-Forge? Ist das wichtig?

Tilikoom
quelle
5
"Conda und conda-forge sind beide Python-Paketmanager." Ich denke nicht, dass das stimmt. Ich glaube nicht, dass diese sogar in die gleiche Kategorie fallen. condaist ein Paketmanager und conda-forgeist ein Kanal. Vielleicht stimmte es, als diese Frage gestellt wurde?
Endolith

Antworten:

200

Die kurze Antwort lautet, dass es meiner Erfahrung nach im Allgemeinen egal ist, welche Sie verwenden.

Die lange Antwort:

Dies conda-forgegilt auch für einen zusätzlichen Kanal, über den Pakete installiert werden können. In diesem Sinne ist es nicht spezieller als der Standardkanal oder einer der anderen Hunderte (Tausende?) Von Kanälen, auf denen Leute Pakete gepostet haben. Sie können Ihren eigenen Kanal hinzufügen, wenn Sie sich unter https://anaconda.org anmelden und Ihre eigenen Conda-Pakete hochladen.

Hier müssen wir die Unterscheidung zwischen condadem plattformübergreifenden Paketmanager und conda-forgedem Paketkanal treffen, über die Sie meiner Meinung nach aus Ihrer Formulierung in der Frage nicht klar sind . Anaconda Inc. (ehemals Continuum IO), die Hauptentwickler der condaSoftware, verwaltet auch einen separaten Paketkanal. Dies ist die Standardeinstellung, wenn Sie conda install packagenameohne Änderung von Optionen tippen .

Es gibt drei Möglichkeiten, die Optionen für Kanäle zu ändern. Die ersten beiden werden jedes Mal ausgeführt, wenn Sie ein Paket installieren, und das letzte ist dauerhaft. Der erste besteht darin, bei jeder Installation eines Pakets einen Kanal anzugeben:

conda install -c some-channel packagename

Natürlich muss das Paket auf diesem Kanal vorhanden sein. Auf diese Weise werden packagenamealle Abhängigkeiten von installiert some-channel. Alternativ können Sie Folgendes angeben:

conda install some-channel::packagename

Das Paket hat immer noch existieren auf some-channel, aber jetzt, nur packagenameaus gezogen werden some-channel. Alle anderen Pakete, die zur Erfüllung von Abhängigkeiten benötigt werden, werden in Ihrer Standardliste von Kanälen gesucht.

Um Ihre Kanalkonfiguration zu sehen, können Sie schreiben:

conda config --show channels

Sie können die Reihenfolge steuern, in der Kanäle durchsucht werden conda config. Du kannst schreiben:

conda config --add channels some-channel

um den Kanal some-channeloben in der channelsKonfigurationsliste hinzuzufügen . Dies gibt some-channeldie höchste Priorität. Die Priorität bestimmt ( teilweise ), welcher Kanal ausgewählt wird, wenn mehr als ein Kanal ein bestimmtes Paket hat. Geben Sie ein, um den Kanal am Ende der Liste hinzuzufügen und ihm die niedrigste Priorität zu geben

conda config --append channels some-channel

Wenn Sie den von Ihnen hinzugefügten Kanal entfernen möchten, können Sie dies schriftlich tun

conda config --remove channels some-channel

Sehen

conda config -h

für mehr Optionen.

Nach alledem gibt es vier Hauptgründe, den conda-forgeKanal anstelle des defaultsvon Anaconda gepflegten Kanals zu verwenden:

  1. Pakete auf sind conda-forge möglicherweise aktueller als die auf dem defaultsKanal
  2. Es gibt Pakete auf dem conda-forgeKanal, die nicht verfügbar sinddefaults
  3. Sie möchten lieber eine Abhängigkeit wie openblas(von conda-forge) anstelle von mkl(von defaults) verwenden.
  4. Wenn Sie ein Paket installieren, für das eine kompilierte Bibliothek erforderlich ist (z. B. eine C-Erweiterung oder ein Wrapper um eine C-Bibliothek), kann dies die Wahrscheinlichkeit von Inkompatibilitäten verringern, wenn Sie alle Pakete aufgrund von Binärdateien von einem einzelnen Kanal aus in einer Umgebung installieren Kompatibilität der Basis-C-Bibliothek (dieser Hinweis ist jedoch möglicherweise veraltet / wird in Zukunft geändert).
Darthbith
quelle
1
Vielen Dank! Ich habe zwei verwandte Fragen: 1. Wie kann ich herausfinden, welcher Kanal gut zum Ausprobieren ist und; 2. Wie kann ich nach der Konfiguration auf einem Kanal die Standardeinstellungen wiederherstellen?
Daniel
1
@Kenny Um Ihre erste Frage zu beantworten, Sie für das Paket suchen , sollten Sie auf möchten anaconda.org und sehen , welche Kanäle das Paket haben. Ich habe die Antwort bearbeitet, um Ihre zweite Frage zu beantworten. Ich möchte jedoch auch darauf hinweisen, dass es wahrscheinlich einfacher ist, conda install -c some-channel packagenameden Befehl zu schreiben , wenn Sie ein einzelnes Paket von einem Kanal aus installieren möchten
darthbith
das ist toll! Gibt es einen Vergleich zwischen conda-forge und conda hinsichtlich der Anzahl der unterstützten Module, der Frische, der Abdeckung usw.?
Rutger Hofste
1
Ist nicht mklschneller als openblas?
Endolith
3
@endolith Vielleicht, aber 1) möglicherweise nur auf Intel-Prozessoren und 2) es ist nicht Open Source
Darthbith
4

Anaconda hat seine Nutzungsbedingungen so geändert , dass "starke gewerbliche Nutzer" zahlen müssten, ohne conda-forgeKanal.

Sie möchten sich wahrscheinlich daran halten, conda-forgewenn Sie nicht für die Nutzung bezahlen möchten. Wie in den Dokumenten angegeben :

conda config --add channels conda-forge
conda config --set channel_priority strict
conda install <package-name>

Sie können auch Miniforge verwenden, das conda-forgeals Standardkanal verwendet wird und ppc64le- und aarch64-Plattformen sowie die anderen üblichen Plattformen unterstützt.

adrin
quelle
3

Im Conda-Forge-Kanal finden Sie Pakete, die für Conda erstellt wurden, aber noch nicht Teil der offiziellen Anaconda-Distribution sind.

Im Allgemeinen können Sie jeden von ihnen verwenden.

Ashiq Imran
quelle
1

Es gibt einige Python-Bibliotheken, die Sie nicht einfach installieren können, conda installda ihr Kanal nur verfügbar ist, wenn Sie conda-forge anwenden. Nach meiner Erfahrung ist pip generischer, um verschiedene Kanalquellen zu untersuchen als conda. Wenn Sie zum Beispiel installieren möchten, python-constraintkönnen Sie dies über tun, pip installaber über ** cond **. Sie müssen den Kanal angeben - conda-forge.

conda install -c conda-forge python-constraint // works

aber nicht

conda install python-constraint
ewalel
quelle
Verwirrende Antwort. Bei der Installation von pip wird das Paket außerhalb der eigenen Paketverwaltung und Abhängigkeitsüberprüfung von conda ausgeführt. Dies bedeutet, dass Sie es (und möglicherweise seine Abhängigkeiten) manuell verwalten müssen und dass Befehle wie conda update --alldas installierte Paket von pip nicht aktualisiert werden
Jean Monet