Quelle est la relation entre virtualenv et pyenv?

j'ai récemment appris à utiliser virtualenv et virtualenvwrapper dans mon workflow mais j'ai vu pyenv mentionné dans quelques guides mais je ne semble pas pouvoir obtenir une compréhension de ce qu'est pyenv et comment il est différent/similaire à virtualenv. Pyenv remplace-t-il virtualenv ou est-ce un outil complémentaire? Dans ce dernier cas, que fait-il différemment et comment les deux (et virtualenvwrapper s'il y a lieu) travaillent-ils ensemble?

130
demandé sur truth1ness 2015-04-29 20:13:23

2 réponses

Pyenv et virtualenv sont des outils très différents qui fonctionnent de différentes façons pour faire des choses différentes:

  • Pyenv est une extension bash - ne fonctionnera pas sur Windows - qui intercepte vos appels vers python, pip, etc., pour les diriger vers l'une des nombreuses chaînes d'outils du système python. Si vous avez toujours toutes les bibliothèques que vous avez installé dans l' version python disponible - en tant que tel, il est bon pour les utilisateurs qui doivent passer entre différentes versions de python.

  • VirtualEnv , est python pur donc fonctionne partout, il fait une copie de, optionnellement une version spécifique de, python et pip local à l'environnement activate qui peut ou ne peut pas inclure des liens vers la chaîne-outil du système actuel, si elle ne le fait pas, vous pouvez installer juste un sous-ensemble connu de les bibliothèques dans l'environnement. En tant que tel il est presque certainement beaucoup mieux pour tester et déployer comme vous le 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 y a une implémentation intégrée de VirtualEnv appelée venv (avec, sur certaines installations un wrapper appelé pyvenv - ce wrapper est déprécié en Python 3.6 ), qui devrait probablement être utilisé de préférence. Pour éviter d'éventuels problèmes avec l'enveloppe, il est souvent une bonne idée de l'utiliser directement à l'aide de /path/to/python3 -m venv desired/env/path ou vous pouvez utiliser l'excellent py python sélecteur sur windows avec py -3 -m venv desired/env/path . Il créera le répertoire spécifié avec desired/env/path configure et le peuplera de manière appropriée. En général, C'est comme utiliser VirtualEnv.

Outils Supplémentaires

il y a un certain nombre d'outils qu'il est intéressant de mentionner, et de considérer, car ils peuvent aider à l'utilisation d'un ou plusieurs des ci-dessus:

  • VirtualEnvWrapper gérer et simplifier L'utilisation et la gestion de VirtualEnv - Cross Platform .
  • pyenv-virtualenv , installé par pyenv-installateur , qui donne à PyEnv des outils pour gérer et interfacer VirtualEnv - avec cela, vous pouvez avoir une installation de base qui inclut plus d'une version de python et créer des environnements isolés dans chacun d'eux - Linux/OS-X . suggéré par Johann Visagie
  • PyInstaller peut prendre votre code python, éventuellement développé et testé sous VirtualEnv, et le regrouper afin qu'il puisse exécuter une plate - forme qui n'a pas votre version de python installé-notez que ce n'est pas un compilateur croisé, vous aurez besoin D'une machine Windows (virtuel -) pour construire Windows installe, etc, mais cela peut être pratique même si vous pouvez ê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.
128
répondu Steve Barnes 2017-07-30 03:43:57

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 donc avoir son propre python (ou même plusieurs) sous leur virtualenv respectif. Il est parfaitement acceptable pour certains/tous les virtualenvs d'avoir la même version de python (par exemple 2.7.16) sans conflit - ils vivent séparément et ne se connaissent pas. Si vous voulez 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 passe en premier). À partir de ce point, appeler python (ou pip etc.) va invoquer la version de virtualenv jusqu'à ce que vous deactivate it (qui restaure le PATH ).

pyenv fonctionne à une échelle plus large que virtualenv - il contient un registre des installations Python (et peut être utilisé pour en installer de nouvelles) et vous permet de configurer quelle version de Python utiliser lorsque vous utilisez la commande python . Semble similaire mais utilisation pratique est un peu différente. Il fonctionne en préparant son Shim python script à votre PATH (de façon permanente) et ensuite décider qui" réel " python à invoquer. Vous pouvez même configurer pyenv pour faire appel à l'un de vos pythons virtualenv (en utilisant le plugin pyenv-virtualenv ). Les versions de Python que vous installez en utilisant pyenv vont dans son répertoire $(pyenv root)/versions/ (par défaut, la racine de pyenv est ~ / .pyenv) sont donc plus "globaux" que virtualenv. Normalement, vous ne pouvez pas dupliquer les versions de Python installées par pyenv , au moins le faire n'est pas l'idée principale.

pour créer un virtualenv avec une version Python spécifique, 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 sûr, une façon d'obtenir une version particulière est de l'installer via pyenv . Une fois que cela est fait, virtualenvs individuels sont libres de diverger en ayant différents modules (ou versions de celui-ci) installés dans eux.

en bref:

  • virtualenv " vous permet de créer un python local, indépendant installations par clonage à partir d'installations existantes
  • pyenv vous permet de installer différentes versions de python simultanément (soit système ou juste pour l'utilisateur local) et ensuite choisir qui de la une multitude de pythons à courir à tout moment (y compris ceux créé par virtualenv ou Anaconda)
4
répondu Blazej Czapp 2017-09-21 12:32:14