Ajout janvier 2019: Si vous revenez sur ce blog après la mise à niveau vers macOS Mojave, veuillez consulter ce problème de github pour une solution au problème commun pyenv `` zlib non disponible ''.
Avant de commencer, passons brièvement en revue les termes utilisés dans le titre:
- Plusieurs versions de Python : différentes installations de Python sur la même machine, 2.7 et 3.4 par exemple.
- Environnements virtuels : environnements indépendants isolés qui peuvent avoir à la fois une version spécifique de Python et des packages spécifiques au projet installés en leur sein, sans affecter les autres projets.
Ici, nous allons examiner trois outils différents pour travailler avec ceux-ci, et quand vous pourriez en avoir besoin. Explorons les cas d'utilisation pour:
venv
/pyvenv
pyenv
pyenv-virtualenv
Si vous utilisez une version unique de la version Python par exemple 3.3+ , et souhaitez gérer différents environnements virtuels, puis venv
est tout ce dont vous avez besoin.
Si vous souhaitez utiliser plusieurs versions de Python à 3.3+ , avec ou sans environnements virtuels , continuez à lire pyenv
.
Si vous souhaitez également travailler avec Python 2 , alors pyenv-virtualenv
est un outil à considérer.
venv
Depuis Python 3.3+, le venv
package est inclus. Il est idéal pour créer des environnements virtuels légers.
Jusqu'à Python 3.6, un script appelé pyvenv
était également inclus en tant que wrapper venv
, mais cela est obsolète. Il sera complètement supprimé dans Python 3.8. La même fonctionnalité est disponible lors de l'utilisation venv
, et toute documentation existante doit être mise à jour. Pour toute personne intéressée, vous pouvez lire les raisons de la dépréciation pyvenv
.
venv
permet de créer un nouvel environnement via la commande du terminal:
$ python3 -m venv directory-name-to-create
activé avec:
$ source name-given/bin/activate
et désactivé avec simplement:
$ deactivate
Si vous devez supprimer complètement l'environnement après l'avoir désactivé, vous pouvez exécuter:
$ rm -r name-given
Par défaut, l'environnement qu'il crée sera la version actuelle de Python que vous utilisez. Si vous écrivez de la documentation et que vous souhaitez obtenir la sécurité supplémentaire que la version correcte de Python est utilisée par votre lecteur, vous pouvez spécifier le numéro de version majeur et mineur dans la commande, comme ceci:
$ python3.6 -m venv example-three-six
Si le lecteur utilise une version autre que 3.6, la commande échouera et l'indiquera dans son message d'erreur. Cependant, toute version de correctif (par exemple la 3.6.4) fonctionnera.
Lorsque l'environnement est actif, tous les packages peuvent y être installés via pip
. Par défaut, l'environnement nouvellement créé ne comprend aucun paquet déjà installé sur la machine. Comme pip
lui-même ne sera pas nécessairement installé sur la machine. Il est recommandé d'effectuer d'abord la mise pip
à niveau vers la dernière version en utilisant pip install --upgrade pip
.
Les projets auront généralement un requirements.txt
fichier spécifiant ses dépendances. Cela permet à la commande de pip install -r requirements.txt
commande de raccourci d'installer rapidement tous les packages dans l'environnement virtuel nouvellement créé. Ils n'existeront que dans l'environnement virtuel. Il ne sera pas disponible lorsqu'il sera désactivé, mais persistera lorsqu'il sera réactivé.
Si vous n'avez pas besoin d'utiliser des versions supplémentaires de Python lui-même, c'est tout ce dont vous avez besoin pour créer des environnements virtuels isolés et spécifiques au projet.
pyenv
Si vous souhaitez utiliser plusieurs versions de Python sur une seule machine, il pyenv
s'agit d'un outil couramment utilisé pour installer et basculer entre les versions. Cela ne doit pas être confondu avec le pyvenv
script déprécié mentionné précédemment . Il n'est pas fourni avec Python et doit être installé séparément.
La pyenv
documentation comprend une excellente description de son fonctionnement, nous allons donc ici voir simplement comment l'utiliser.
Tout d'abord, nous devrons l'installer. Si vous utilisez Mac OS X, nous pouvons le faire en utilisant Homebrew, sinon envisager d'autres options d'installation.
$ brew update $ brew install pyenv
Ensuite, ajoutez ce qui suit vers le bas de vos scripts shell pour permettre pyenv
de changer automatiquement de version pour vous:
eval "$(pyenv init -)"
Pour ce faire, ouvrez votre script shell en cours d'utilisation, via $ ~/.zshrc
, $ ~/.bashrc
ou $ ~/.bash_profile
et copiez et collez la ligne ci-dessus dans.
L'exécution pyenv versions
montrera quelles versions de Python sont actuellement installées, avec une à *
côté de celle actuellement utilisée. pyenv version
le montre directement et python --version
peut être utilisé pour le vérifier.
Pour installer une version supplémentaire, par exemple 3.4.0
, utilisez simplement pyenv install 3.4.0
.
pyenv
regarde à quatre endroits pour décider quelle version de Python utiliser, par ordre de priorité:
- La
PYENV_VERSION
variable d'environnement (si spécifiée). Vous pouvez utiliser lapyenv shell
commande pour définir cette variable d'environnement dans votre session shell actuelle. - Le
.python-version
fichier spécifique à l' application dans le répertoire actuel (le cas échéant). Vous pouvez modifier le.python-version
fichier du répertoire courant avec lapyenv local
commande. - Le premier
.python-version
fichier trouvé (le cas échéant) en recherchant dans chaque répertoire parent, jusqu'à atteindre la racine de votre système de fichiers. - Le fichier de la version globale. Vous pouvez modifier ce fichier à l'aide de la
pyenv global
commande. Si le fichier de version globale n'est pas présent, pyenv suppose que vous souhaitez utiliser le Python «système». (En d'autres termes, quelle que soit la version qui fonctionnerait si pyenv n'était pas dans votrePATH
.)
Lors de la configuration d'un nouveau projet qui doit utiliser Python 3.6.4, il pyenv local 3.6.4
sera alors exécuté dans son répertoire racine. Cela définirait à la fois la version et créerait un .python-version
fichier, afin que les machines des autres contributeurs le récupèrent.
La description complète des pyenv
commandes est à mettre en signet.
pyenv et venv
Lorsque vous travaillez avec Python 3.3+, nous savons maintenant à la fois comment installer et basculer entre différentes versions de Python, et comment créer de nouveaux environnements virtuels.
À titre d'exemple, disons que nous configurions un projet qui devait utiliser Python 3.4.
Tout d'abord, nous pourrions définir notre version locale en utilisant pyenv local 3.4.0
.
Si nous exécutions ensuite python3 -m venv example-project
un nouvel environnement virtuel serait configuré sous example-project
, en utilisant notre Python 3.4.0 activé localement.
Nous activons en utilisant source example-project/bin/activate
et pouvons commencer à travailler.
Ensuite, nous pourrions éventuellement documenter qu'un collaborateur devrait utiliser python3.4 -m venv
. Cela signifie que même si un collaborateur n'utilisait pas pyenv, la python3.4
commande ferait une erreur si leur version Python n'était pas la même version majeure et mineure (3 et 4), comme nous l'avions prévu.
Alternativement, nous pourrions choisir de simplement spécifier que 3.4.0 devait être utilisé et donner des instructions python3 -m venv
. Si nous pensons qu'une valeur supérieure à 3,4 est acceptable, nous pouvons également choisir d'utiliser python3
over python3.4
, comme si le collaborateur utilisait 3,6, il recevrait également une erreur. Il s'agit d'une décision spécifique au projet.
pyenv-virtualenv
pyenv
peut être utilisé pour installer les versions Python 2 et 3. Cependant, comme nous l'avons vu, venv
est limité aux versions de Python supérieures à 3.3.
pyenv-virtualenv
est un outil pour créer des environnements virtuels intégrés pyenv
et fonctionne pour toutes les versions de Python. Il est toujours recommandé d'utiliser le Python officiel venv
lorsque cela est possible. Mais si, par exemple, vous créez un environnement virtuel basé sur 2.7.13
, alors cela complimente pyenv
.
Cela fonctionne également bien avec les conda
environnements Anaconda et Miniconda si vous les utilisez déjà. Un outil appelé virtualenv
existe également. Ce n'est pas couvert ici, mais c'est lié à la fin.
Après l'installation, pyenv
il peut ensuite être installé en utilisant Homebrew (ou des alternatives) comme suit:
$ brew install pyenv-virtualenv
Ensuite, dans votre .zshrc
, .bashrc
ou .bash_profile
(selon le shell que vous utilisez) ajoutez ce qui suit vers le bas:
eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)"
Cela permet pyenv
d'activer et de désactiver automatiquement les environnements lors du déplacement des répertoires.
Pour créer un nouvel environnement virtuel, utilisez:
$ pyenv virtualenv // for example $ pyenv virtualenv 2.7.10 my-virtual-env-2.7.10
Les environnements existants peuvent être répertoriés avec:
$ pyenv virtualenvs
Activé / désactivé avec:
$ pyenv activate $ pyenv deactivate
Au moment de l'écriture, lors de l'utilisation, activate
l'avertissement prompt changing will be removed from future release
sera affiché. Ceci est attendu et se réfère uniquement à l' (env-name)
affichage dans votre shell, pas à l'utilisation de la activate
commande elle-même.
L'installation des exigences fonctionne comme décrit dans venv
. Contrairement à venv
une rm -r
commande n'est pas nécessaire pour supprimer un environnement, une uninstall
commande existe.
Dernières pensées
Entre ces trois outils, nous avons la possibilité de collaborer sur n'importe quel projet, quelle que soit la version de Python ou des dépendances requises. Nous savons également comment documenter les instructions de configuration que les autres peuvent utiliser pour tout projet sur lequel nous travaillons.
Nous pouvons également voir le raisonnement derrière quel ensemble utiliser, car tous les développeurs n'auront pas besoin des trois.
J'espère que cela a été utile et constitue une référence utile en combinaison avec la documentation liée ci-dessous.
Merci d'avoir lu! ?
Autres choses que j'ai explorées:
- Mocking des modules ES et CommonJS avec jest.mock ()
- Guide du débutant sur Elastic Container Service d'Amazon
Ressources
- Environnements virtuels Python: une introduction
- Déprécier
pyvenv
venv
Documentation Pythonvenv
contrevirtualenv
- Quelle est la différence entre venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenv, etc.?
- Dois-je installer
pip
?