Faut-il utiliser conda ou conda-forge pour les environnements Python?

128

Condaet conda-forgesont tous deux des gestionnaires de packages Python. Quel est le choix approprié lorsqu'un package existe dans les deux référentiels? Django, par exemple, peut être installé avec l'un ou l'autre, mais la différence entre les deux réside dans plusieurs dépendances (conda-forge en a beaucoup plus). Il n'y a aucune explication à ces différences, pas même un simple README.

Lequel faut-il utiliser? Conda ou conda-forge? Est-ce que ça importe?

tilikoom
la source
5
"Conda et conda-forge sont tous deux des gestionnaires de packages Python." Je ne pense pas que ce soit vrai. Je ne pense pas que ce soit même dans la même catégorie de choses. condaest un gestionnaire de packages et conda-forgeune chaîne. C'était peut-être vrai quand cette question a été posée?
endolith

Réponses:

204

La réponse courte est que, d'après mon expérience en général, peu importe ce que vous utilisez.

La réponse longue:

Il en conda-forgeva de même pour un canal supplémentaire à partir duquel les packages peuvent être installés. En ce sens, ce n'est pas plus spécial que la chaîne par défaut, ou l'une des centaines (milliers?) De chaînes sur lesquelles les gens ont posté des packages. Vous pouvez ajouter votre propre chaîne si vous vous inscrivez sur https://anaconda.org et téléchargez vos propres packages Conda.

Ici, nous devons faire la distinction, dont je pense que vous n'êtes pas clair d'après votre formulation dans la question, entre condale gestionnaire de packages multiplateforme et conda-forgele canal de packages. Anaconda Inc. (anciennement Continuum IO), les principaux développeurs du condalogiciel, maintiennent également un canal séparé de packages, qui est la valeur par défaut lorsque vous tapez conda install packagenamesans modifier aucune option.

Il existe trois façons de modifier les options des chaînes. Les deux premiers sont effectués à chaque fois que vous installez un package et le dernier est persistant. La première consiste à spécifier un canal à chaque fois que vous installez un package:

conda install -c some-channel packagename

Bien sûr, le package doit exister sur ce canal. De cette façon, l'installation packagenameet toutes ses dépendances à partir de some-channel. Vous pouvez également spécifier:

conda install some-channel::packagename

Le paquet doit toujours exister some-channel, mais maintenant, seul packagenamesera extrait some-channel. Tous les autres packages nécessaires pour satisfaire les dépendances seront recherchés dans votre liste de chaînes par défaut.

Pour voir la configuration de votre canal, vous pouvez écrire:

conda config --show channels

Vous pouvez contrôler l'ordre dans lequel les chaînes sont recherchées conda config. Tu peux écrire:

conda config --add channels some-channel

pour ajouter le canal some-channelen haut de la channelsliste de configuration. Cela donne some-channella priorité la plus élevée. La priorité détermine ( en partie ) quel canal est sélectionné lorsque plusieurs canaux ont un paquet particulier. Pour ajouter le canal à la fin de la liste et lui donner la priorité la plus basse, tapez

conda config --append channels some-channel

Si vous souhaitez supprimer la chaîne que vous avez ajoutée, vous pouvez le faire en écrivant

conda config --remove channels some-channel

Voir

conda config -h

pour plus d'options.

Cela dit, il y a quatre raisons principales d'utiliser le conda-forgecanal au lieu du defaultscanal maintenu par Anaconda:

  1. Les packages sur conda-forge peuvent être plus à jour que ceux sur la defaultschaîne
  2. Certains packages sur la conda-forgechaîne ne sont pas disponibles à partir dedefaults
  3. Vous préférez utiliser une dépendance telle que openblas(from conda-forge) au lieu de mkl(from defaults).
  4. Si vous installez un package qui nécessite une bibliothèque compilée (par exemple, une extension C ou un wrapper autour d'une bibliothèque C), cela peut réduire le risque d'incompatibilités si vous installez tous les packages dans un environnement à partir d'un seul canal en raison de binaire compatibilité de la bibliothèque de base C (mais cet avis peut être obsolète / changer dans le futur).
Darkbith
la source
1
Merci! J'ai deux questions connexes: 1. comment puis-je savoir quelle chaîne est bonne à essayer et; 2. Après avoir configuré sur un canal, comment puis-je le réinitialiser aux paramètres par défaut?
Daniel
1
@Kenny Pour répondre à votre première question, vous devriez rechercher le paquet que vous voulez sur anaconda.org et voir quelles chaînes ont le paquet. J'ai modifié la réponse pour répondre à votre deuxième question. Cependant, je noterais également que si vous souhaitez installer un seul package à partir d'un canal, il est probablement plus facile d'utiliser la conda install -c some-channel packagenamemanière d'écrire la commande
darthbith
c'est bien! Existe-t-il une comparaison disponible entre conda-forge et conda en termes de nombre de modules pris en charge, de fraîcheur, de couverture, etc.?
Rutger Hofste
1
N'est-ce pas mklplus rapide que openblas?
endolith
3
@endolith Peut-être, mais 1) peut-être uniquement sur les processeurs Intel et 2) ce n'est pas open source
darthbith
5

Anaconda a modifié ses conditions d'utilisation afin que les "gros utilisateurs commerciaux" aient à payer, ce qui n'inclut pas le conda-forgecanal.

Vous voudrez probablement vous en tenir conda-forgesi vous ne voulez pas payer pour l'utilisation. Comme indiqué dans la documentation :

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

Vous pouvez également utiliser miniforge qui a conda-forgecomme canal par défaut et prend en charge les plates-formes ppc64le et aarch64 ainsi que les autres plates-formes habituelles.

adrin
la source
3

Le canal conda-forge est l'endroit où vous pouvez trouver des paquets qui ont été construits pour conda mais qui ne font pas encore partie de la distribution officielle d'Anaconda.

En règle générale, vous pouvez utiliser n'importe lequel d'entre eux.

Ashiq Imran
la source
0

Il existe des bibliothèques Python que vous ne pouvez pas installer avec un simple conda installcar leur canal n'est pas disponible sauf si vous appliquez conda-forge. D'après mon expérience, pip est plus générique pour examiner différentes sources de canaux que conda. Par exemple, si vous souhaitez installer, python-constraintvous pouvez le faire via pip installmais l'installer via ** cond **. vous devez spécifier le canal - conda-forge.

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

mais non

conda install python-constraint
ewalel
la source
1
Réponse déroutante. L'installation de pip prend le paquet en dehors de la gestion des paquets et de la vérification des dépendances de conda, ce qui signifie que vous devez le gérer (et potentiellement ses dépendances) manuellement et que des commandes telles que conda update --allne mettront pas à jour le paquet installé de pip
Jean Monet
Cette réponse donne de mauvais conseils. Il est déconseillé d'entrelacer les commandes conda et pip dans le même environnement. Utilisez l'installation conda exclusivement pour tous les packages, sauf si un package Python particulier n'est pas disponible au format conda. Utilisez ensuite pip en dernier recours, car pip n'ajoutera PAS le package à l'index de package conda pour cet environnement. L'utilisation de conda, puis pip, puis conda, puis pip, puis conda, etc. pour créer un environnement donnera éventuellement un index d'environnement conda corrompu.
Rich Lysakowski PhD il y a