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? Si ce dernier agit différemment et comment les deux (et virtualenvwrapper le cas échéant) fonctionnent-ils ensemble?
Pyenv et virtualenv sont des outils très différents qui fonctionnent de différentes façons. différentes choses:
Pyenv est une extension bash - ne fonctionnera pas sous Windows - qui intercepte vos appels vers python, pip, etc., pour les diriger vers l'un de plusieurs le système python chaînes d'outils. Ainsi, vous avez toujours toutes les bibliothèques que vous avez installées dans la version sélectionnée python - en tant que telle, elle convient aux utilisateurs qui doivent basculer entre les différentes versions de python.
VirtualEnv , est pur python et fonctionne donc partout, il en fait une copie, éventuellement d'une version spécifique of, python et pip local à l'environnement d'activation qui peut inclure ou non des liens vers la chaîne d'outils système actuelle. Sinon, vous pouvez installer uniquement un sous-ensemble connu de bibliothèques dans cet environnement. En tant que tel, il est presque certainement meilleur 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. votre module.
Notez qu'à partir de Python 3.3, il y a 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 à l'aide de /path/to/python3 -m venv desired/env/path
ou d'utiliser l'excellent sélecteur py
python sous Windows avec py -3 -m venv desired/env/path
. Il créera le répertoire spécifié avec desired/env/path
configure et le renseignera de manière appropriée. En général, cela ressemble beaucoup à l'utilisation de VirtualEnv.
Il est utile de mentionner un certain nombre d'outils, car ils peuvent vous aider à utiliser un ou plusieurs de ces outils:
virtualenv
vous permet de créer une installation personnalisée de Python, par exemple. dans un sous-répertoire de votre projet. Chacun de vos projets peut donc avoir son propre python
(ou même plusieurs) sous son virtualenv respectif. Il est parfaitement correct que certains/tous les virtuels possèdent même la même version de python
(exemple: 2.7.16) sans conflit - ils vivent séparément et ne se connaissent pas. Si vous souhaitez utiliser l'un de ces python
s, vous devez activate
it (en exécutant un script qui modifiera temporairement votre PATH
pour s'assurer que le répertoire bin/
de virtualenv est bien première). À partir de ce moment, appeler python
(ou pip
etc.) invoquera la version de virtualenv jusqu'à ce que vous deactivate
it (qui restaure la PATH
).
pyenv
fonctionne sur une échelle plus large que virtualenv
- il contient un registre de Python installations (et peut être utilisé pour installer de nouvelles) et vous permet de configurer quelle version de Python à exécuter lorsque vous utilisez la commande python
. Cela semble similaire mais son utilisation pratique est un peu différente. Cela fonctionne en ajoutant son script python
shim à votre PATH
(de façon permanente), puis en décidant quel "vrai" python
invoquer. Vous pouvez même configurer pyenv pour appeler dans l’un de vos pythons virtualenv (en utilisant le plugin pyenv-virtualenv
). Les versions de Python que vous installez à l'aide de pyenv
se trouvent dans son répertoire $(pyenv root)/versions/
(par défaut, pyenv root est ~/.pyenv), elles sont donc plus globales que virtualenv. Normalement, vous ne pouvez pas dupliquer les versions de Python installées via pyenv
, du moins le faire n’est pas l’idée principale.
Pour créer un virtualenv avec une version spécifique de Python, vous devez disposer de cette version quelque part dans votre système (que ce soit sur le PATH
ou non) et la cloner dans votre virtualenv nouvellement créé. Bien sûr, un moyen d’obtenir une version particulière est de l’installer via pyenv
. Une fois cela fait, les virtualenvs individuels sont libres de diverger en y installant différents modules (ou versions).
En bref:
virtualenv
vous permet de créer des installations _ locales et indépendantes python en clonant à partir d'installations existantespyenv
vous permet d’installer différentes versions de python simultanément (à l’échelle du système ou uniquement pour l’utilisateur local), puis de choisir les pythons à exécuter à un moment donné (y compris ceux créé par virtualenv ou Anaconda)