python - update - virtualenvwrapper




Quelle est la relation entre virtualenv et pyenv? (2)

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?


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 son virtualenv respectif. Il est parfaitement normal que certains / tous les virtualenv aient même 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 souhaitez utiliser l'un de ces python , vous devez l' activate (en exécutant un script qui modifiera temporairement votre PATH pour vous assurer que le répertoire bin/ virtualenv vient en premier). À partir de ce moment, appeler python (ou pip etc.) invoquera la version de virtualenv jusqu'à ce que vous la deactivate (ce qui restaure le PATH ).

pyenv fonctionne à une plus grande échelle que virtualenv - 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 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 l’un de vos pythons virtualenv (en utilisant le plugin pyenv-virtualenv ). Les versions de Python que vous installez avec pyenv sont pyenv dans le $(pyenv root)/versions/ (par défaut, racine de pyenv est ~ / .pyenv), elles sont donc plus globales que virtualenv. D'ordinaire, vous ne pouvez pas dupliquer les versions de Python installées via pyenv . Au moins, ce 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 sur votre système (que ce soit sur le PATH ) et le cloner essentiellement 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, 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 python locales et indépendantes en clonant celles existantes.
  • pyenv vous permet d'installer simultanément différentes versions de python (sur l'ensemble du système ou uniquement pour l'utilisateur local), puis de choisir la multitude de pythons à exécuter à un moment donné (y compris ceux créés par virtualenv ou Anaconda).

Pyenv et virtualenv sont des outils très différents qui fonctionnent de différentes manières pour faire 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'une des chaînes d'outils python du système. Ainsi, toutes les bibliothèques que vous avez installées dans la version sélectionnée de Python sont toujours disponibles. En tant que telles, elles conviennent aux utilisateurs qui doivent basculer entre les différentes versions de python.

  • VirtualEnv est du pur python et fonctionne donc partout. Il crée une copie de, éventuellement une version spécifique de, python et pip local dans l’environnement d’activation, qui peut inclure ou non des liens vers la chaîne d’outils système actuelle. Sinon , vous pouvez installez seulement 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 sur votre module.

venv python> 3.3

Notez que depuis 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'excellent sélecteur py python sur les fenêtres avec py -3 -m venv desired/env/path . Il créera le répertoire spécifié avec desired/env/path configuration desired/env/path et le remplira de manière appropriée. En général, cela ressemble beaucoup à l'utilisation de VirtualEnv.

Outils supplémentaires

Il convient 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 - Cross Platform .
  • pyenv-virtualenv , installé par pyenv-installer , qui fournit aux outils PyEnv la gestion et l’interfaçage avec VirtualEnv. Vous pouvez ainsi disposer d’une installation de base comprenant plusieurs versions de python et créer des environnements isolés au sein de chacun d’entre eux - Linux / OS - X. Proposé par Johann Visagie
  • PyInstaller peut prendre votre code python, éventuellement développé et testé sous VirtualEnv, et le regrouper de manière à pouvoir exécuter une plate-forme sur laquelle votre version de python n'est pas installée. Notez que ce n'est pas un compilateur croisé. -) machine pour construire des installations Windows, etc., mais cela peut être pratique même lorsque vous pouvez être sûr que python sera installé mais que vous ne pouvez pas être sûr que la version de python et toutes les bibliothèques seront compatibles avec votre code.




pyenv