En tant que nouveau venu dans le monde de Python, cette question m'a frustré sans fin et m'a embrouillé pendant des mois. Quel environnement virtuel et quel(s) gestionnaire(s) de paquets dois-je investir dans l'apprentissage quand je sais que je vais l'utiliser pendant des années ?
Le meilleur article répondant à cette question est le suivant https://jakevdp.github.io/blog/2016/08/25/conda-myths-and-misconceptions/ par Jake Vanderplas. Bien qu'il date de quelques années, il fournit des réponses pratiques et l'histoire des gestionnaires de paquets et d'environnements virtuels Python depuis les tranchées, alors que cet état de l'art se développait.
C'était particulièrement frustrant pour moi dans les communautés de la science des données et du "big data cloud computing", car conda est largement utilisé comme gestionnaire d'environnement virtuel et gestionnaire de paquets à fonctions complètes pour Python et JavaScript, SQL, Java, HTML5 et Jupyter Notebooks.
Alors pourquoi utiliser pip, alors que conda fait tout ce que pip et les variantes de venv font ?
La réponse est : "parce que vous DEVEZ utiliser pip si un paquetage Conda n'est tout simplement pas disponible". Bien souvent, un paquetage requis n'est disponible qu'au format pip et il n'y a pas d'autre solution que d'utiliser pip. Vous pouvez apprendre à utiliser conda build
mais si vous n'êtes pas le mainteneur du paquet, vous devez alors convaincre le propriétaire du paquet de générer un paquet conda pour chaque nouvelle version (ou le faire vous-même).
Ces paquets basés sur pip diffèrent sur de nombreuses dimensions importantes et pratiques :
- stabilité
- échéance
- complexité
- soutien actif (par opposition à mourant ou mort)
- les niveaux d'adoption près du " noyau " de l'écosystème Python par rapport aux niveaux " en marge " (c'est-à-dire intégrés à la distro Python.org) en marge" (c'est-à-dire intégré à la distro Python.org)
- facile à comprendre et à utiliser (pour les débutants)
Je vais répondre à votre question pour deux paquets sous l'angle de la maturité et de la stabilité du paquet.
venv et virtualenv sont les plus matures, les plus stables et les plus soutenus par la communauté. D'après la documentation en ligne, vous pouvez voir que virtualenv est en version 20.x à ce jour. virtualenv
virtualenv est un outil permettant de créer des environnements Python isolés. Depuis Python 3.3, un sous-ensemble de cet outil a été intégré dans la bibliothèque standard sous le module venv. Le module venv n'offre pas toutes les fonctionnalités de cette bibliothèque, pour ne citer que les plus importantes :
is slower (by not having the app-data seed method),
is not as extendable,
cannot create virtual environments for arbitrarily installed python versions (and automatically discover these),
is not upgrade-able via pip,
does not have as rich programmatic API (describe virtual environments without creating them).
virtualenvwrapper est un ensemble de scripts pour aider les gens à utiliser virtualenv (c'est un "wrapper" qui n'est pas bien maintenu, sa dernière mise à jour date de 2019. virtualenvwrapper
Ma recommandation est d'éviter, dans la mesure du possible, TOUS les environnements virtuels de pip. Utilisez Conda à la place. Conda fournit une approche unifiée. Il est maintenu par des équipes de développeurs open source professionnels et a une société réputée qui fournit un financement et une version supportée commercialement. Les équipes qui maintiennent pip, venv, virtualenv, pipenv, et de nombreuses autres variantes de pip ont des ressources limitées en comparaison. La pluralité des environnements virtuels pip est frustrante pour les débutants. La complexité des outils d'environnement virtuel basés sur pip, la fragmentation, les paquets marginaux et non pris en charge, ainsi que le support très incohérent m'ont poussé à utiliser conda. Pour les travaux de science des données, je recommande d'utiliser un gestionnaire d'environnement virtuel basé sur pip en dernier recours lorsque les paquets conda n'existent pas.
Les différences entre les variantes de venv me font toujours peur car mon temps est limité pour apprendre de nouveaux paquets. pipenv, venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, poetry, et d'autres ont des dizaines de différences et de complexités qui prennent des jours à comprendre. Je déteste prendre un chemin et découvrir que le support d'un paquet disparaît lorsqu'un mainteneur démissionne (ou devient trop occupé pour le maintenir). J'ai juste besoin de faire mon travail.
Dans un souci d'utilité, voici quelques liens qui vous aideront à plonger dans l'inconnu, sans pour autant vous perdre dans l'enfer de Dante (re : pip).
Guide des environnements virtuels de Python
Il est important de choisir les paquets Python "de base" dans lesquels investir pour votre carrière (à long terme), par rapport à la réalisation d'un travail à court terme. Cependant, il s'agit d'une question d'analyse commerciale. Essayez-vous simplement d'accomplir une tâche, ou êtes-vous un ingénieur logiciel professionnel qui construit des systèmes évolutifs et performants qui nécessitent le moins d'efforts de maintenance possible au fil du temps ? A mon avis, conda vous mènera à ce dernier endroit plus facilement que de traiter les problèmes de pluralité de pip. conda manque toujours d'outils de migration de paquets pip en une étape qui rendent cette question discutable. Si nous pouvions simplement convertir les paquets pip en paquets conda, alors pypi.org et conda-forge pourraient être fusionnés. Pip est nécessaire car les paquets conda ne sont pas (encore) universels. De nombreux programmeurs Python sont soit trop paresseux pour créer des paquets conda, soit ils ne programment qu'en Python et n'ont pas besoin du support agnostique / multilingue de conda.
conda a été une aubaine pour moi, car il répond aux besoins de l'ingénierie logicielle en nuage et de la science des données en matière de prise en charge multilingue des extensions JavaScript, SQL et Jupyter Notebook, et conda s'intègre parfaitement à Docker et aux autres environnements natifs en nuage. Je vous encourage à apprendre et à maîtriser conda, qui vous permettra de contourner de nombreuses questions complexes auxquelles les outils basés sur pip ne répondront peut-être jamais.
Restez simple ! J'ai besoin d'un paquet qui fasse 90% de ce dont j'ai besoin et de conseils et de solutions de contournement pour les 10% restants.
Consultez les articles liés ici pour en savoir plus sur les environnements virtuels basés sur les pip.
J'espère que ces informations seront utiles à l'auteur du message original et qu'elles donneront aux amateurs de pip et de conda quelques éléments de réflexion.
51 votes
Et pour anticiper les votes serrés, j'ai pensé que c'était une question plus générale que stackoverflow.com/questions/29950300/ Je ne me sentais donc pas à l'aise de modifier cette question ou de poster une réponse trop générale sur ce post.
41 votes
Ce guide est à la fois utile et constamment mis à jour, car python continue à ajouter de plus en plus de "one & only one obvious way" pour faire les choses : docs.python-guide.org/fr/latest/dev/virtualenvs
4 votes
Depuis la version 3.6, il est plus facile de faire fonctionner virtualenv que pyenv sur macOS (je suis un pyNoob).
1 votes
@HashRocketSyntax
virtualenv
ypyenv
ne remplissent pas la même fonction, et ne sont pas des alternatives l'une à l'autre. Voir ma réponse.23 votes
J'ai passé une journée entière à perdre du temps avec pipenv. En résumé, c'est trop commercialisé. Venv et virtualenv si vous avez besoin de py2 sont les outils appropriés. Conda (miniconda si vous n'avez pas besoin de la pile complète) est également très bon. Très bon article : chriswarrick.com/blog/2018/07/17/
2 votes
Je ne veux pas être submergé, alors j'utilise Anaconda.
0 votes
"Pourquoi demandez-vous cela ? Avez-vous fait des recherches sur le sujet ? Est-ce que c'est pour les devoirs, peut-être ? Votez à la fin avec des raisons parfaites que je suis prêt à articuler dans Meta." / Votre mod :D
9 votes
Je pense que la réponse acceptée ci-dessous a un parti pris malheureux contre
venv
qui est l'outil correct à utiliser à l'avenir pour Python 3. Il devrait vraiment être le premier sur la liste, suivi devirtualenv
. docs.python.org/3/library/venv.html3 votes
Éviter tous ces problèmes et utiliser simplement
conda
(Miniconda). Il est meilleur que toutes les solutions énumérées ici et les rend toutes obsolètes. En prime, il ne fonctionne pas seulement avec Python, vous pouvez installer une grande variété de logiciels avec lui, pas seulement des paquets Python. Il inclut une installation depip
donc toutes vospip install
continueront à fonctionner normalement. Avecconda
vous pouvez installer en même temps une pile logicielle complète d'applications, comme des versions spécifiques de Django, Gunicorn, Celery, PostgreSQL, RabbitMQ, nginx, Java, R, etc.