2196 votes

Quelle est la différence entre venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenv, etc ?

Python 3.3 inclut dans sa bibliothèque standard le nouveau paquetage venv . Que fait-il, et en quoi diffère-t-il de tous les autres paquets qui semblent correspondre à l'expression rationnelle ? (py)?(v|virtual|pip)?env ?

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).

20voto

mirek Points 188
  • pyenv - gère différentes versions de python,
  • tous les autres - créer un environnement virtuel (qui a isolé python et installé les "exigences"),

pipenv veulent combiner tous, en plus des précédents il installe des "exigences" (dans l'environnement virtuel actif ou créer son propre si aucun n'est actif)

Alors peut-être que vous serez heureux avec pipenv seulement.

Mais j'utilise : pyenv + pyenv-virtualenvwrapper, + pipenv (pipenv pour l'installation des exigences seulement).

Dans Debian :

  1. apt install libffi-dev

  2. installer pyenv sur la base de https://www.tecmint.com/pyenv-install-and-manage-multiple-python-versions-in-linux/ mais

  3. mais au lieu de pyenv-virtualenv installer pyenv-virtualenvwrapper (qui peut être une bibliothèque autonome ou un plugin pyenv, ici la 2ème option) :

    $ pyenv install 3.9.0
    
    $ git clone https://github.com/pyenv/pyenv-virtualenvwrapper.git $(pyenv root)/plugins/pyenv-virtualenvwrapper
    # inside ~/.bashrc add:
    # export $VIRTUALENVWRAPPER_PYTHON="/usr/bin/python3"
    $ source ~/.bashrc
    
    $ pyenv virtualenvwrapper

Créez ensuite des environnements virtuels pour vos projets (le répertoire de travail doit exister) :

pyenv local 3.9.0  # to prevent 'interpreter not found' in mkvirtualenv
python -m pip install --upgrade pip setuptools wheel
mkvirtualenv <venvname> -p python3.9 -a <workingdir>

et passer d'un projet à l'autre :

workon <venvname>
python -m pip install --upgrade pip setuptools wheel pipenv

Dans un projet, j'ai le fichier requirements.txt, sans fixer les versions à l'intérieur (si une limitation de version n'est pas nécessaire). Vous avez 2 outils possibles pour les installer dans l'environnement virtuel actuel : pip-tools o pipenv . Disons que vous allez utiliser pipenv :

pipenv install -r requirements.txt

ceci créera les fichiers Pipfile et Pipfile.lock, les versions fixes sont dans le 2ème. Si vous voulez réinstaller quelque part exactement les mêmes versions alors (Pipfile.lock doit être présent) :

pipenv install

Rappelez-vous que Pipfile.lock est lié à une certaine version de Python et doit être recréé si vous utilisez une autre version.

Comme vous le voyez, j'ai écrit requirements.txt. Cela pose quelques problèmes : Vous devez également supprimer un paquet supprimé du Pipfile. Il est donc probablement préférable d'écrire directement le Pipfile.

Donc vous pouvez voir que j'utilise pipenv très mal. Peut-être que si vous l'utilisez bien, il peut tout remplacer ?

EDIT 2021.01 : J'ai changé ma pile pour : pyenv + pyenv-virtualenvwrapper + poetry . Je n'utilise pas d'installation apt ou pip de virtualenv ou virtualenvwrapper, et j'installe plutôt pyenv Le plugin pyenv-virtualenvwrapper . C'est le moyen le plus simple.

Poetry c'est génial pour moi :

poetry add <package>   # install single package
poetry remove <package>
poetry install   # if you remove poetry.lock poetry will re-calculate versions

1 votes

Pouvez-vous nous donner plus de détails sur votre pile actuelle ? pyenv + pyenv-virtualenvwrapper + poetry surtout comment vous instruisez poetry pour utiliser une version spécifique installée via pyenv et si vous désactivez la création d'un environnement virtuel dans l'application poetry ?

0voto

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X