Quelle est la différence entre venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenv, etc.?
2 réponses
paquets PyPI ne figurant pas dans 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 vous recommande fortement d'apprentissage, comme c'est un outil très utile, et je vais faire des comparaisons pour le reste de cette réponse.Il fonctionne par l'installation d'un tas des fichiers dans un répertoire (par exemple:
env/
), puis la modification de la variable d'environnementPATH
pour la préfixer avec un répertoire personnalisébin
(par exemple:env/bin/
). Une copie exacte du binairepython
oupython3
est placée dans ce répertoire, mais Python est programmé pour chercher les bibliothèques relatives à son chemin en premier, dans le répertoire d'environnement. Il ne fait pas partie de la bibliothèque standard de Python, mais est officiellement béni par le PyPA (Python Packaging Authority). Une fois activé, vous pouvez installer des paquets dans l'environnement virtuel en utilisantpip
. -
pyenv
est utilisé pour isoler les versions Python. Par exemple, vous pouvez vouloir tester votre code contre python 2.6, 2.7, 3.3, 3.4 et 3.5, donc vous aurez besoin d'un moyen de passer entre eux. Une fois activé, il préfixe la variable d'environnementPATH
à~/.pyenv/shims
, où il existe des fichiers spéciaux correspondant à la Commandes Python(python
,pip
). Ce ne sont pas des copies des commandes envoyées par Python; ce sont des scripts spéciaux qui décident à la volée quelle version de Python exécuter basée sur la variable d'environnementPYENV_VERSION
, ou le fichier.python-version
, ou le fichier~/.pyenv/version
.pyenv
facilite également le téléchargement et l'installation de plusieurs versions de Python, en utilisant la commandepyenv install
. -
pyenv-virtualenv
est un plugin pourpyenv
par le même auteur quepyenv
, pour vous permettre d'utiliserpyenv
etvirtualenv
dans le même temps, confortablement. Cependant, si vous utilisez Python 3.3 ou plus tard,pyenv-virtualenv
essaiera d'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 de commodité. -
virtualenvwrapper
est un ensemble d'extensions àvirtualenv
(voir docs ). Il vous donne des commandes commemkvirtualenv
,lssitepackages
, et surtoutworkon
pour passer entre différents répertoiresvirtualenv
. Cet outil est particulièrement utile si vous voulez plusieurs répertoiresvirtualenv
. -
pyenv-virtualenvwrapper
est un plugin pourpyenv
par le même auteur quepyenv
, pour intégrer commodémentvirtualenvwrapper
danspyenv
. -
pipenv
, par Kenneth Reitz (l'auteur derequests
), est le plus récent projet de cette liste. Il vise à combinerPipfile
,pip
etvirtualenv
en une seule commande sur la ligne de commande. Le Le répertoirevirtualenv
est généralement placé dans~/.local/share/virtualenvs/XXX
, avecXXX
étant un hachage du chemin du répertoire du projet. C'est différent devirtualenv
, où le répertoire est typiquement dans le répertoire courant.Le Python de l'Emballage Guide de l' recommande
pipenv
lors de l'élaboration de Applications Python (par opposition aux bibliothèques). Il ne semble pas y être des plans pour soutenirvenv
au lieu devirtualenv
( #15 ). Son option en ligne de commande--venv
fait référence à lavirtualenv
répertoire, pasvenv
, et de même, l'environnement la variablePIPENV_VENV_IN_PROJECT
affecte l'emplacement duvirtualenv
répertoire, pasvenv
répertoire ( #1919 ).
bibliothèque Standard:
-
pyvenv
est un script envoyé avec Python 3 mais déprécié en Python 3.6 car il avait des problèmes (sans mentionner le nom confus). En 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, certains distros le séparent en une distro séparée paquet, commepython3-venv
sur Ubuntu/Debian). Il sert un but similaire àvirtualenv
, et fonctionne d'une manière très similaire, mais il n'a pas besoin de copier les binaires Python autour (sauf sur Windows). Utilisez ceci si vous n'avez pas besoin de supporter Python 2. Au moment d'écrire, la communauté Python semble être heureuse avecvirtualenv
et je n'ai pas entendu beaucoup parler devenv
.
la plupart de ces outils se complètent. Par exemple, pipenv
intègre pip
, virtualenv
et même pyenv
si vous le souhaitez. Les seuls outils qui sont de véritables alternatives les uns aux autres ici sont venv
et virtualenv
.
recommandation pour les débutants:
C'est ma recommandation personnelle pour les débutants: commencez par apprendre virtualenv
et pip
, des outils qui fonctionnent à la fois avec Python 2 et 3 et dans une variété de situations, et ramassez les autres outils Une fois que vous démarrez besoin d'eux.
j'éviterais simplement l'utilisation de virtualenv
après Python3.3 + et à la place utiliser la bibliothèque standard expédiée venv
. Pour créer un nouvel environnement virtuel, tapez:
$ python3 -m venv <MYVENV>
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 intégré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 Python binaire des pauses. Puisque C'est ainsi que vous faites une copie distribuable Python, c'est un gros défaut. BTW pour inspecter incorporé le fichier de bibliothèque de liens sur OS X, utilisez otool
. Par exemple, dans votre environnement virtuel, tapez:
$ otool -L bin/python
python:
@executable_path/../Python (compatibility version 3.4.0, current version 3.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
par conséquent, j'éviterais virtualenvwrapper
et pipenv
. pyvenv
est déprécié. pyenv
semble être utilisé souvent où virtualenv
est utilisé, mais je voudrais rester loin de lui aussi car je pense que venv
fait aussi ce que pyenv
est construit pour.
venv
crée des environnements virtuels dans le shell qui sont fresh et sandboxed , avec bibliothèques installables par l'utilisateur , et c'est multi-python safe . Fresh parce que les environnements virtuels ne commencent qu'avec les bibliothèques standards qui sont livrées avec python, vous devez installer toutes les autres bibliothèques à nouveau avec pip install
alors que l'environnement virtuel est actif. Sandboxed parce qu'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 d'impacter votre installation de base python. bibliothèques installables par L'utilisateur parce que le dossier cible de l'environnement virtuel est créé sans sudo
dans un répertoire que vous possédez déjà, donc vous n'aurez pas besoin sudo
permet d'y installer des bibliothèques. Enfin c'est multi-python safe , car lorsque les environnements virtuels s'activent, l'interpréteur de commandes ne voit que la version python (3.4, 3.5 etc.) qui a été utilisé pour construire cet environnement virtuel.
pyenv
est similaire à venv
en ce qu'il vous permet de gérer plusieurs environnements python. Cependant avec pyenv
vous ne pouvez pas facilement rollback bibliothèque installe à un certain état de départ et vous aura probablement besoin des privilèges admin
à un moment donné pour mettre à jour les bibliothèques. Donc, je pense qu'il est également préférable d'utiliser venv
.
au cours des deux dernières années, j'ai trouvé de nombreux problèmes dans les systèmes de construction (paquets emacs, constructeurs d'applications python autonomes, installateurs...) qui se résument finalement à des problèmes avec virtualenv
. Je pense que python sera une meilleure plate-forme lorsque nous éliminons cette option supplémentaire et utiliser uniquement venv
.