J'ai récemment appris à utiliser virtualenv et virtualenvwrapper dans mon flux de travail, mais j'ai vu pyenv mentionné dans quelques guides, mais je n'arrive pas à comprendre ce qu'est pyenv et en quoi il est différent / similaire à virtualenv. Pyenv est-il un remplacement meilleur / plus récent pour virtualenv ou un outil complémentaire? Dans ce dernier cas, que fait-il différemment et comment les deux (et virtualenvwrapper le cas échéant) fonctionnent-ils ensemble?
175
pyenv
confondu avecpyvenv
Réponses:
Pyenv et virtualenv sont des outils très différents qui fonctionnent de différentes manières pour faire des choses différentes:
Pyenv est une extension bash - ne fonctionnera pas sous Windows - qui intercepte vos appels à python, pip, etc., pour les diriger vers l'une des nombreuses chaînes d'outils python du système. Ainsi, vous avez toujours toutes les bibliothèques que vous avez installées dans la version python sélectionnée disponibles - en tant que tel, il est bon pour les utilisateurs qui doivent basculer entre différentes versions de python.
VirtualEnv , est du python pur et fonctionne donc partout, il fait une copie, éventuellement d'une version spécifique de, python et pip local à l'environnement d'activation qui peut ou non inclure des liens vers la chaîne d'outils système actuelle, si ce n'est pas le cas, vous pouvez installez juste un sous-ensemble connu de bibliothèques dans cet environnement. En tant que tel, il est presque certainement beaucoup mieux pour les tests et le déploiement car vous savez exactement quelles bibliothèques, à quelles versions, sont utilisées et un changement global n'aura pas d'impact sur votre module.
venv python> 3.3
Notez qu'à partir de Python 3.3, il existe une implémentation intégrée de VirtualEnv appelée venv (avec, sur certaines installations, un wrapper appelé pyvenv - ce wrapper est obsolète dans Python 3.6 ), qui devrait probablement être utilisé de préférence. Pour éviter d'éventuels problèmes avec le wrapper, il est souvent judicieux de l'utiliser directement en utilisant
/path/to/python3 -m venv desired/env/path
ou vous pouvez utiliser l'excellentpy
sélecteur python sur Windows avecpy -3 -m venv desired/env/path
. Il créera le répertoire spécifié avecdesired/env/path
configure et le remplira de manière appropriée. En général, cela ressemble beaucoup à l'utilisation de VirtualEnv.Outils supplémentaires
Il existe un certain nombre d'outils qu'il convient de mentionner et d'envisager, car ils peuvent aider à utiliser un ou plusieurs des éléments ci-dessus:
la source
venv
maintenant dans la bibliothèque standard?virtualenv
vous permet de créer une installation Python personnalisée, par exemple dans un sous-répertoire de votre projet. Chacun de vos projets peut ainsi avoir sa proprepython
(voire plusieurs) sous son virtualenv respectif. Il est parfaitement normal que certains / tous les virtualenv aient même la même version depython
(par exemple 2.7.16) sans conflit - ils vivent séparément et ne se connaissent pas. Si vous voulez utiliser l'un de cespython
s, vous devez le faireactivate
(en exécutant un script qui modifiera temporairement votrePATH
pour vous assurer que lebin/
répertoire de virtualenv vient en premier). À partir de là, l'appelpython
(oupip
etc.) appellera la version de virtualenv jusqu'à ce que vous l'ayezdeactivate
(qui restaure lePATH
).pyenv
fonctionne à une échelle plus large quevirtualenv
- il contient un registre des installations Python (et peut être utilisé pour en installer de nouvelles) et vous permet de configurer la version de Python à exécuter lorsque vous utilisez lapython
commande. Cela semble similaire mais l'utilisation pratique est un peu différente. Il fonctionne en ajoutant sonpython
script shim à votrePATH
(de façon permanente) et en décidant ensuite quel "réel"python
appeler. Vous pouvez même configurer pyenv pour qu'il appelle l'un de vos pythons virtualenv (en utilisant lepyenv-virtualenv
plugin). Les versions de Python que vous installez en utilisantpyenv
vont dans son$(pyenv root)/versions/
répertoire (par défaut, pyenv root est ~ / .pyenv) sont donc plus «globales» que virtualenv. Normalement, vous ne pouvez pas dupliquer les versions de Python installées viapyenv
, du moins ce n'est pas l'idée principale.Pour créer un virtualenv avec une version spécifique de Python, vous devez avoir cette version quelque part dans votre système (que ce soit sur le
PATH
ou non) et essentiellement la cloner dans votre virtualenv nouvellement créé. Bien entendu, une façon d'obtenir une version particulière est de l'installer viapyenv
. Une fois que cela est fait, les virtualenv individuels sont libres de diverger en ayant différents modules (ou versions de ceux-ci) installés en eux.En bref:
virtualenv
vous permet de créer des installations python locales et indépendantes en clonant à partir de celles existantespyenv
vous permet d'installer différentes versions de python simultanément (soit à l'échelle du système ou juste pour l'utilisateur local), puis de choisir lequel de la multitude de pythons à exécuter à tout moment (y compris ceux créés par virtualenv ou Anaconda)la source