Python 3.3 inclut dans sa bibliothèque standard le nouveau package venv
. Que fait-il et en quoi diffère-t-il de tous les autres packages qui semblent correspondre à l'expression régulière (py)?(v|virtual|pip)?env
?
1028
Python 3.3 inclut dans sa bibliothèque standard le nouveau package venv
. Que fait-il et en quoi diffère-t-il de tous les autres packages qui semblent correspondre à l'expression régulière (py)?(v|virtual|pip)?env
?
virtualenv
et n'exécutentpyenv
pas la même fonction, et ne sont pas des alternatives les unes aux autres. Voir ma réponse.Réponses:
Paquets PyPI absents de la bibliothèque standard:
virtualenv
est un outil très populaire qui crée des environnements Python isolés pour les bibliothèques Python. Si vous n'êtes pas familier avec cet outil, je recommande fortement de l'apprendre, car c'est un outil très utile, et je vais faire des comparaisons avec lui pour le reste de cette réponse.Il fonctionne en installant un tas de fichiers dans un répertoire (par exemple:)
env/
, puis en modifiant laPATH
variable d'environnement pour la préfixer avec unbin
répertoire personnalisé (par exemple:)env/bin/
. Une copie exacte depython
oupython3
binaire est placée dans ce répertoire, mais Python est programmé pour rechercher d'abord les bibliothèques par rapport à son chemin, dans le répertoire d'environnement. Il ne fait pas partie de la bibliothèque standard de Python, mais est officiellement béni par la PyPA (Python Packaging Authority). Une fois activé, vous pouvez installer des packages dans l'environnement virtuel à l'aide depip
.pyenv
est utilisé pour isoler les versions de Python. Par exemple, vous voudrez peut-être tester votre code par rapport à Python 2.7, 3.6, 3.7 et 3.8, vous aurez donc besoin d'un moyen de basculer entre eux. Une fois activé, il préfixe laPATH
variable d'environnement avec~/.pyenv/shims
, où il y a des fichiers spéciaux correspondant aux commandes Python (python
,pip
). Ce ne sont pas des copies des commandes livrées avec Python; ce sont des scripts spéciaux qui décident à la volée de la version de Python à exécuter en fonction de laPYENV_VERSION
variable d'environnement, du.python-version
fichier ou du~/.pyenv/version
fichier.pyenv
facilite également le processus de téléchargement et d'installation de plusieurs versions de Python, à l'aide de la commandepyenv install
.pyenv-virtualenv
est un plugin pourpyenv
par le même auteur quepyenv
, pour vous permettre d'utiliserpyenv
etvirtualenv
en même temps de manière pratique. Cependant, si vous utilisez Python 3.3 ou une version ultérieure,pyenv-virtualenv
essayez de l'exécuterpython -m venv
s'il est disponible, au lieu devirtualenv
. Vous pouvez utiliservirtualenv
etpyenv
ensemble sanspyenv-virtualenv
, si vous ne voulez pas les fonctionnalités pratiques.virtualenvwrapper
est un ensemble d'extensions pourvirtualenv
(voir la documentation ). Il vous donne des commandes commemkvirtualenv
,lssitepackages
et en particulierworkon
pour la commutation entre les différentsvirtualenv
répertoires. Cet outil est particulièrement utile si vous souhaitez plusieursvirtualenv
répertoires.pyenv-virtualenvwrapper
est un plug - in pourpyenv
le même auteur quepyenv
, d'intégrer facilementvirtualenvwrapper
danspyenv
.pipenv
vise à combinerPipfile
,pip
etvirtualenv
en une seule commande sur la ligne de commande. Levirtualenv
répertoire est généralement placé dans~/.local/share/virtualenvs/XXX
, avecXXX
un hachage du chemin du répertoire du projet. Ceci est différent devirtualenv
, où le répertoire se trouve généralement dans le répertoire de travail actuel.pipenv
est destiné à être utilisé lors du développement d'applications Python (par opposition aux bibliothèques). Il existe des alternatives àpipenv
, telles quepoetry
, que je n'énumérerai pas ici car cette question concerne uniquement les packages portant le même nom.Bibliothèque standard:
pyvenv
est un script livré avec Python 3 mais déconseillé en Python 3.6 car il avait des problèmes (sans parler du nom déroutant). Dans Python 3.6+, l'équivalent exact estpython3 -m venv
.venv
est un paquet livré avec Python 3, que vous pouvez exécuter en utilisantpython3 -m venv
(bien que pour une raison quelconque, certaines distributions le séparent dans un paquet de distribution séparé, commepython3-venv
sur Ubuntu / Debian). Il sert le même but quevirtualenv
, mais n'a qu'un sous-ensemble de ses fonctionnalités ( voir une comparaison ici ).virtualenv
continue d'être plus populaire quevenv
, d'autant plus que le premier prend en charge Python 2 et 3.Recommandation pour les débutants:
C'est ma recommandation personnelle pour les débutants: commencez par apprendre
virtualenv
etpip
, des outils qui fonctionnent avec Python 2 et 3 et dans une variété de situations, et prenez d'autres outils une fois que vous commencez à en avoir besoin.la source
venv
réellement résolu ce problème?venv
vous puissiez passer à une nouvelle version de Python plus facilement.Je voudrais simplement éviter l'utilisation de
virtualenv
Python3.3 + et utiliser à la place la bibliothèque standard livréevenv
. Pour créer un nouvel environnement virtuel, vous devez taper:virtualenv
essaie de copier le binaire Python dans le répertoire bin de l'environnement virtuel. Cependant, il ne met pas à jour les liens de fichiers de bibliothèque incorporés dans ce binaire, donc si vous construisez Python à partir de la source dans un répertoire non système avec des noms de chemin relatifs, le binaire Python se casse. Puisque c'est ainsi que vous faites une copie Python distribuable, c'est un gros défaut. BTW pour inspecter les liens de fichiers de bibliothèque intégrés sur OS X, utilisezotool
. Par exemple, depuis votre environnement virtuel, tapez:Par conséquent, j'éviterais
virtualenvwrapper
etpipenv
.pyvenv
est obsolète.pyenv
semble être utilisé souvent là où ilvirtualenv
est utilisé mais je resterais loin de lui aussi car je pense qu'il faitvenv
aussi cepyenv
pour quoi il est conçu.venv
crée des environnements virtuels dans le shell qui sont frais et en bac à sable , avec des bibliothèques installables par l' utilisateur , et il est multi-python sûr . Frais car les environnements virtuels ne commencent qu'avec les bibliothèques standard livrées avec python, vous devez réinstaller toutes les autres bibliothèques pendantpip install
que l'environnement virtuel est actif. Sandboxé car aucune de ces nouvelles installations de bibliothèque n'est visible en dehors de l'environnement virtuel, vous pouvez donc supprimer tout l'environnement et recommencer sans vous soucier de l'impact sur votre installation de base de python. Bibliothèques installables par l'utilisateur car le dossier cible de l'environnement virtuel est créé sanssudo
dans un répertoire que vous possédez déjà, vous n'aurez donc pas besoin d'sudo
autorisations pour y installer des bibliothèques. Enfin, il est multi-python sûr , car lorsque les environnements virtuels s'activent, le shell ne voit que la version python (3.4, 3.5 etc.) qui a été utilisée pour construire cet environnement virtuel.pyenv
est similairevenv
en ce qu'il vous permet de gérer plusieurs environnements python. Cependant,pyenv
vous ne pouvez pas facilement restaurer les installations de bibliothèque à un état de démarrage et vous aurez probablement besoin deadmin
privilèges à un moment donné pour mettre à jour les bibliothèques. Je pense donc qu'il est également préférable d'utiliservenv
.Au cours des deux dernières années, j'ai trouvé de nombreux problèmes dans les systèmes de construction (packages emacs, constructeurs d'applications autonomes python, installateurs ...) qui finissent par poser des problèmes avec
virtualenv
. Je pense que python sera une meilleure plate-forme lorsque nous éliminerons cette option supplémentaire et n'utiliserons quevenv
.la source
add2virtualenv
peaufine votrePYTHONPATH
en ajoutant un_virtualenv_path_extensions.pth
fichier personnalisé soussite-packages
. Vous pouvez également mettre à jour laPYTHONPATH
variable d'environnement dans lebin/activate
fichier que vous appelez chaque fois que vous activez l'environnement virtuel. Ou vous pouvez ajouter des liens symboliques soussite-packages
pour pointer vers les répertoires supplémentaires. Ces deux alternatives sont plus transparentes par rapport aux outils de ligne de commande traditionnels que les développeurs utilisent largement pour résoudre les problèmes. L'utilisation d'une coutume.pth
avec un nom non documenté, la rend plus magique IMO.PYTHONPATH
évite le besoin deadd2virtualenv
. En ce qui concerne le manque d'aide sur SO de votre premier commentaire, ma seule suggestion est de voter pour les réponses si elles résolvent votre problème, pour motiver les gens à vous dépanner lorsque vous postez? Une demi-heure d'enquête + rédaction en échange d'un clic de souris? Cela ressemble à un bon échange ...pyvenv
qui est déprécié, nonpyenv
. Il est si facile de se confondre avec les noms de ces outils.J'ai descendu le
pipenv
terrier du lapin ( c'est un trou profond et sombre en effet ... ) et depuis la dernière réponse il y a plus de 2 ans , j'ai pensé qu'il était utile de mettre à jour la discussion avec les derniers développements sur le sujet des enveloppes virtuelles Python I ai trouvé.AVERTISSEMENT:
Cette réponse ne concerne PAS la poursuite du débat qui fait rage sur les mérites de pipenv contre venv en tant que solutions d'enveloppe - je n'approuve pas non plus . Il s'agit de PYPA approuvant des normes contradictoires et comment le développement futur de virtualenv promet d'negate faire un ou l' autre / ou le choix entre eux du tout. Je me suis concentré sur ces deux outils précisément parce qu'ils sont les oints de PyPA .
venv
Comme le note l'OP, venv est un outil de virtualisation des environnements. PAS une solution tierce, mais un outil natif. PyPA approuve venv pour la création d' ENVELOPPES VIRTUELLES : " Modifié dans la version 3.5: L'utilisation de venv est maintenant recommandée pour créer des environnements virtuels ".
pipenv
pipenv - comme venv - peut être utilisé pour créer des enveloppes virtuelles, mais également la gestion des packages et lafonctionnalité de vérification des vulnérabilités . Au lieu d'utiliser
requirements.txt
,pipenv
fournit la gestion des packages via Pipfile . Comme PyPA approuve pipenv pour la GESTION DES PAQUETS , cela semble impliquerpipfile
de supplanterrequirements.txt
.CEPENDANT : pipenv utilise virtualenv comme outil pour créer des enveloppes virtuelles, PAS venv qui est approuvé par PyPA comme l'outil pour créer des enveloppes virtuelles.
Normes contradictoires:
Donc, si s'installer sur une solution d'enveloppe virtuelle n'a pas été assez difficile, PyPA approuve maintenant deux outils différents qui utilisent différentes solutions d'enveloppe virtuelle. Le débat rageur de Github sur venv vs virtualenv qui met en évidence ce conflit peut être trouvé ici .
Résolution de conflit:
Le débat Github référencé dans le lien ci-dessus a orienté le développement de virtualenv dans le sens de l'adaptation de venv dans les versions futures :
Conclusion:
Il semble donc qu'il y aura une future convergence entre les deux solutions d'enveloppes virtuelles rivales, mais pour l'instant pipenv - qui utilise
virtualenv
- varie considérablement devenv
.Compte tenu des problèmes que pipenv résout et du fait que PyPA a donné sa bénédiction, il semble avoir un bel avenir. Et si virtualenv atteint ses objectifs de développement proposés, le choix d'une solution d'enveloppe virtuelle ne devrait plus être un cas de pipenv OU venv .
la source
Mise à jour d'avril 2020
Je cherchais la même chose lorsque je suis tombé sur ce post . Je pense que cette question de savoir quel outil utiliser est assez déroutante et difficile pour les nouveaux utilisateurs de Python comme moi. Ceci est directement du site Web de PyPA concernant pipenv:
la source
pipenv
équipe a publié 2 versions à PyPI:2020.5.28
et plus récemment2020.6.2
: pypi.org/project/pipenv/#history