J'ai récemment découvert Conda après avoir eu du mal à installer SciPy, en particulier sur une application Heroku que je développe.
Avec Conda, vous créez des environnements très similaires à ce que fait virtualenv . Mes questions sont:
- Si j'utilise Conda, cela remplacera-t-il le besoin de virtualenv? Sinon, comment utiliser les deux ensemble? Dois-je installer virtualenv dans Conda ou Conda dans virtualenv?
- Dois-je toujours utiliser pip? Si oui, pourrai-je toujours installer des packages avec pip dans un environnement isolé?
Réponses:
Conda remplace virtualenv. À mon avis, c'est mieux. Il n'est pas limité à Python mais peut également être utilisé pour d'autres langages. D'après mon expérience, cela offre une expérience beaucoup plus fluide, en particulier pour les packages scientifiques. La première fois que j'ai installé MayaVi correctement sur Mac, c'était avec
conda
.Vous pouvez toujours utiliser
pip
. En fait,conda
s'installepip
dans chaque nouvel environnement. Il connaît les packages installés par pip.Par exemple:
répertorie tous les packages installés dans votre environnement actuel. Les packages installés par Conda apparaissent comme ceci:
et ceux installés via
pip
ont le<pip>
marqueur:la source
<pip>
montre qu'il a été installé avec pip sinon il est installé avec conda.En bref, vous n'avez besoin que de conda.
Conda combine efficacement les fonctionnalités de pip et virtualenv dans un seul paquet, vous n'avez donc pas besoin de virtualenv si vous utilisez conda.
Vous seriez surpris du nombre de packages pris en charge par conda. Si cela ne suffit pas, vous pouvez utiliser pip sous conda.
Voici un lien vers la page conda comparant conda, pip et virtualenv:
https://docs.conda.io/projects/conda/en/latest/commands.html#conda-vs-pip-vs-virtualenv-commands .
la source
Environnements virtuels et
pip
J'ajouterai que créer et supprimer des environnements conda est simple avec Anaconda.
Dans un environnement activé , installez les packages via
conda
oupip
:Ces environnements sont fortement liés à la gestion des packages de type pip de conda , il est donc simple de créer des environnements et d'installer des packages Python et non-Python.
Jupyter
De plus, l' installation
ipykernel
dans un environnement ajoute une nouvelle liste dans le menu déroulant Kernels des blocs-notes Jupyter, étendant les environnements reproductibles aux blocs-notes. Depuis Anaconda 4.1, nbextensions a été ajoutée , ajoutant plus facilement des extensions aux blocs-notes.Fiabilité
D'après mon expérience, conda est plus rapide et plus fiable pour installer de grandes bibliothèques telles que
numpy
etpandas
. De plus, si vous souhaitez transférer votre état préservé d'un environnement, vous pouvez le faire en partageant ou clonant un env.la source
L'installation de Conda vous permettra de créer et de supprimer des environnements python comme vous le souhaitez, vous offrant ainsi les mêmes fonctionnalités que virtualenv .
Dans le cas des deux distributions, vous seriez en mesure de créer une arborescence de systèmes de fichiers isolée, où vous pouvez installer et supprimer des packages python (probablement, avec pip) comme vous le souhaitez. Ce qui pourrait être utile si vous souhaitez avoir différentes versions de la même bibliothèque pour différents cas d'utilisation ou si vous voulez simplement essayer une distribution et la supprimer ensuite en conservant votre espace disque.
Différences:
Accord de licence. Alors que virtualenv relève de la licence MIT la plus libérale , Conda utilise une licence BSD à 3 clauses.
Conda vous fournit son propre système de contrôle des packages. Ce système de contrôle de package fournit souvent des versions précompilées (pour les systèmes les plus populaires) de logiciels non python populaires, ce qui peut facilement permettre à certains packages d'apprentissage automatique de fonctionner. À savoir, vous n'avez pas à compiler du code C / C ++ optimisé pour votre système. Bien que ce soit un grand soulagement pour la plupart d'entre nous, cela pourrait affecter les performances de ces bibliothèques.
Contrairement à virtualenv, Conda duplique certaines bibliothèques système au moins sur le système Linux. Ces bibliothèques peuvent se désynchroniser et entraîner un comportement incohérent de vos programmes.
Verdict:
Conda est génial et devrait être votre choix par défaut lorsque vous commencez votre chemin avec l'apprentissage automatique. Cela vous fera gagner du temps en jouant avec gcc et de nombreux packages. Pourtant, Conda ne remplace pas virtualenv. Il introduit une complexité supplémentaire qui pourrait ne pas toujours être souhaitée. Il est sous licence différente. Vous voudrez peut-être éviter d'utiliser conda dans des environnements distribués ou sur du matériel HPC.
la source
conda
logiciel et les bibliothèques installés. Et dans HPC,conda
est préférable dans de nombreux cas, en fait, il est utilisé par les administrateurs HPC pour remplacer des choses comme lesmodule
systèmes. Il permet aux logiciels installés par les utilisateurs et une meilleure isolation des logiciels, deux gros problèmes sur HPC. La seule mise en garde que j'ai rencontrée est que de nombreux systèmes de fichiers HPC ont des limites strictes sur le nombre de fichiers dans un répertoire, et conda crée plusieurs milliers de fichiers.J'utilise les deux et (à partir de janvier 2020), ils ont des différences superficielles qui se prêtent à des usages différents pour moi. Par défaut, Conda préfère gérer une liste d'environnements pour vous dans un emplacement central, tandis que virtualenv crée un dossier dans le répertoire actuel. Le premier (centralisé) est logique si vous effectuez par exemple un apprentissage automatique et que vous n'avez que quelques environnements généraux que vous utilisez dans de nombreux projets et que vous souhaitez y accéder de n'importe où. Ce dernier (par dossier de projet) a du sens si vous faites de petits projets ponctuels qui ont des ensembles d'exigences de bibliothèque complètement différents qui appartiennent vraiment davantage au projet lui-même.
L'environnement vide créé par Conda est d'environ 122 Mo, tandis que celui de virtualenv est d'environ 12 Mo. C'est donc une autre raison pour laquelle vous préférerez peut-être ne pas disperser les environnements Conda partout.
Enfin, une autre indication superficielle que Conda préfère ses envs centralisés est que (encore une fois, par défaut) si vous créez un env Conda dans votre propre dossier de projet et l'activez le préfixe de nom qui apparaît dans votre shell est l'absolu (beaucoup trop long) chemin d'accès au dossier. Vous pouvez résoudre ce problème en lui donnant un nom, mais virtualenv fait la bonne chose par défaut.
Je m'attends à ce que ces informations deviennent rapidement obsolètes car les deux gestionnaires de packages se disputent la domination, mais ce sont les compromis à compter d'aujourd'hui :)
la source
pipenv
?Pipenv est une autre nouvelle option et ma méthode préférée actuelle pour obtenir un environnement opérationnel .
C'est actuellement l'outil de packaging Python officiellement recommandé de Python.org
la source
pipenv --two
pour Python2 et pipenv - trois pour python3Oui,
conda
est beaucoup plus facile à installer quevirtualenv
, et remplace à peu près ce dernier.la source
virtualenv
par un outil de gestion de l'environnement virtuel plus généralconda
. De plus, Anaconda est juste une distribution Python + qui inclut l'outil Conda; la question (et la réponse) ne concerne que Conda.Je travaille en entreprise, derrière plusieurs pare-feu avec une machine sur laquelle je n'ai pas d'accès administrateur
Dans mon expérience limitée avec python (2 ans), je suis tombé sur quelques bibliothèques (JayDeBeApi, sasl) qui lors de l'installation via pip ont jeté une erreur d'erreurs de dépendance C ++: Microsoft Visual C ++ 14.0 est requis. Obtenez-le avec "Microsoft Visual C ++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools
ceux-ci ont bien installé avec conda, donc depuis ces jours, j'ai commencé à travailler avec conda env. Cependant, il n'est pas facile d'empêcher conda d'installer des dépendances à l'intérieur de c.programfiles où je n'ai pas accès en écriture.
la source