web-dev-qa-db-fra.com

Quelle est la relation entre virtualenv et pyenv?

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?

155
truth1ness

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.

venv python> 3.3

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.

Outils supplémentaires

Il est utile de mentionner un certain nombre d'outils, car ils peuvent vous aider à utiliser un ou plusieurs de ces outils:

  • VirtualEnvWrapper Gérez et simplifiez l'utilisation et la gestion de VirtualEnv - multiplate-forme .
  • pyenv-virtualenv , installé par pyenv-installer, qui fournit des outils PyEnv pour la gestion et l'interfaçage avec VirtualEnv - avec peut avoir une installation de base qui inclut plusieurs versions de python et créer des environnements isolés dans chacune d’elles - Linux/OS-X . Proposé par Johann Visagie
  • PyInstaller peut prendre votre code python, éventuellement développé et testé sous VirtualEnv, et le regrouper de sorte qu'il puisse exécuter une plate-forme ne disposant pas de votre version de python installée - Notez que ce n'est pas un compilateur croisé, vous aurez besoin d'une machine (virtuelle) Windows pour créer des installations Windows, etc., mais cela peut s'avérer utile même peut être sûr que python sera installé mais ne peut pas être sûr que la version de python et toutes les bibliothèques seront compatibles avec votre code.
148
Steve Barnes

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 pythons, 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 existantes
  • pyenv 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)
12
Blazej Czapp