Pyenv vous permet de basculer facilement entre plusieurs versions de Python. Il est simple, discret et suit la tradition UNIX des outils à usage unique qui font bien une chose.
Ce projet a été fourchu à partir de RBENV et Ruby-Build, et modifié pour Python.
PATH
.L'option Homebrew de la section macOS ci-dessous fonctionnerait également si vous avez installé Homebrew.
curl https://pyenv.run | bash
Pour plus de détails, visitez notre autre projet: https://github.com/pyenv/pyenv-installer
Cela vous amènera avec la dernière version de PYENV et facilitera la fourniture et contribuera à toute modification en amont.
$HOME/.pyenv
(mais vous pouvez l'installer ailleurs): git clone https://github.com/pyenv/pyenv.git ~/.pyenv
cd ~/.pyenv && src/configure && make -C src
Les options de la section Linux ci-dessus fonctionnent également, mais Homebrew est recommandé pour l'utilisation de base.
Mettre à jour Homebrew et installer Pyenv:
brew update
brew install pyenv
Si vous souhaitez installer (et mettre à jour) le dernier chef de développement de PYENV plutôt que la dernière version, exécutez plutôt:
brew install pyenv --head
Suivez ensuite le reste des étapes post-installation, à commencer par configurer votre environnement de coquille pour PYENV.
FACULTATIF. Pour corriger les scripts "" config " de brew doctor
, existent en dehors de votre système ou des répertoires Homebrew"
Si vous allez construire des formules Homebrew de Source qui se lient contre Python comme Tkinter ou Numpy (ce n'est généralement le cas que si vous êtes un développeur d'une telle formule, ou si vous avez une version EOL de macOS pour laquelle les bouteilles prédéfinies sont plus fourni et vous utilisez une telle formule).
Pour les éviter de lier accidentellement à un python fourni par Pyenv, ajoutez la ligne suivante dans la configuration de votre shell interactif:
Bash / zsh:
alias brew= ' env PATH="${PATH//$(pyenv root)/shims:/}" brew '
Poisson:
alias brew= " env PATH=(string replace (pyenv root)/shims '' "$ PATH " ) brew "
PYENV ne prend pas officiellement en charge les fenêtres et ne fonctionne pas sous Windows en dehors du sous-système Windows pour Linux. De plus, même là, les pythons qu'il installe ne sont pas des versions Windows natives mais plutôt des versions Linux s'exécutant dans une machine virtuelle - vous n'obtiendrez donc pas de fonctionnalités spécifiques à Windows.
Si vous êtes sous Windows, nous vous recommandons d'utiliser la fourche pyenv-win
de @ Kirankotari - qui installe des versions Native Windows Python.
La configuration ci-dessous devrait fonctionner pour la grande majorité des utilisateurs pour les cas d'utilisation courants. Voir la configuration avancée pour plus de détails et plus d'options de configuration.
Les fichiers de démarrage en stock varient considérablement entre les distributions dans lesquelles d'entre elles se procurent qui, dans quelles circonstances, dans quel ordre et quelle configuration supplémentaire ils effectuent. En tant que tel, le moyen le plus fiable d'obtenir PYENV dans tous les environnements est d'ajouter les commandes de configuration PYENV à la fois .bashrc
(pour les shells interactifs) et le fichier de profil que Bash utiliserait (pour les shells de connexion).
Tout d'abord, ajoutez les commandes à ~/.bashrc
en exécutant ce qui suit dans votre terminal:
echo ' export PYENV_ROOT="$HOME/.pyenv" ' >> ~ /.bashrc
echo ' command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH" ' >> ~ /.bashrc
echo ' eval "$(pyenv init -)" ' >> ~ /.bashrc
Ensuite, si vous avez ~/.profile
, ~/.bash_profile
ou ~/.bash_login
, ajoutez également les commandes. Si vous n'en avez rien, créez un ~/.profile
et ajoutez les commandes là-bas.
~/.profile
: echo ' export PYENV_ROOT="$HOME/.pyenv" ' >> ~ /.profile
echo ' command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH" ' >> ~ /.profile
echo ' eval "$(pyenv init -)" ' >> ~ /.profile
~/.bash_profile
: echo ' export PYENV_ROOT="$HOME/.pyenv" ' >> ~ /.bash_profile
echo ' [[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" ' >> ~ /.bash_profile
echo ' eval "$(pyenv init -)" ' >> ~ /.bash_profile
AVERTISSEMENT BASS : Il existe certains systèmes où la variable BASH_ENV
est configurée pour pointer .bashrc
. Sur de tels systèmes, vous devriez presque certainement mettre la ligne eval "$(pyenv init -)"
dans .bash_profile
, et non dans .bashrc
. Sinon, vous pouvez observer un comportement étrange, comme pyenv
se lancer dans une boucle infinie. Voir # 264 pour plus de détails.
echo ' export PYENV_ROOT="$HOME/.pyenv" ' >> ~ /.zshrc
echo ' [[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" ' >> ~ /.zshrc
echo ' eval "$(pyenv init -)" ' >> ~ /.zshrc
Si vous souhaitez également obtenir PYENV dans des shells de connexion non interactifs, ajoutez également les commandes à ~/.zprofile
ou ~/.zlogin
.
Si vous avez des poissons 3.2.0 ou plus récents, exécutez-le de manière interactive:
set -Ux PYENV_ROOT $HOME /.pyenv
fish_add_path $PYENV_ROOT /bin
Sinon, exécutez l'extrait ci-dessous:
set -Ux PYENV_ROOT $HOME /.pyenv
set -U fish_user_paths $PYENV_ROOT /bin $fish_user_paths
Maintenant, ajoutez ceci à ~/.config/fish/config.fish
:
pyenv init - | source
pour que les changements PATH
prennent effet.
exec " $SHELL "
Installez les dépendances de build Python avant d'essayer d'installer une nouvelle version Python.
Vous pouvez maintenant commencer à utiliser PYENV.
Si vous avez mis à niveau de Pyenv version 2.0.x-2.2.x
La logique de démarrage et les instructions ont été mises à jour pour la simplicité en 2.3.0. Le schéma de configuration précédent et plus compliqué pour 2.0.0-2.2.5 fonctionne toujours.
PYENV_ROOT
pour indiquer le chemin où PYENV stockera ses données. $HOME/.pyenv
est la valeur par défaut. Si vous avez installé PYENV via la caisse GIT, nous vous recommandons de le régler au même endroit que l'endroit où vous l'avez cloné.pyenv
sur votre PATH
s'il n'est pas déjà làeval "$(pyenv init -)"
Pour installer pyenv
dans votre fonction Shell en tant que fonction, activez les cales et la complétion automatiqueeval "$(pyenv init --path)"
à la place pour activer simplement les cales, sans intégration de coquille Pour installer des versions Python supplémentaires, utilisez pyenv install
.
Par exemple, pour télécharger et installer Python 3.10.4, exécuter:
pyenv install 3.10.4
L'exécution pyenv install -l
donne la liste de toutes les versions disponibles.
Remarque: Si vous avez du mal à installer une version Python, veuillez visiter la page Wiki sur les problèmes de construction courants.
Remarque: Si vous souhaitez utiliser le proxy pour le téléchargement, veuillez définir les variables d'environnement http_proxy
et https_proxy
.
Remarque: Si vous souhaitez un interprète plus rapide au prix des temps de construction plus longs, voir Building pour des performances maximales dans la lecture de Python-Build.
Toutes les sous-communs PYENV, sauf uninstall
résoudre automatiquement les préfixes complets à la dernière version de la ligne de version correspondante.
pyenv install
choisit la dernière version connue, tandis que d'autres sous-communs choisissent la dernière version installée.
Par exemple pour installer, puis passer à la dernière version 3.10:
pyenv install 3.10
pyenv global 3.10
Vous pouvez exécuter pyenv latest -k <prefix>
pour voir comment pyenv install
résoudrait un préfixe spécifique, ou pyenv latest <prefix>
pour voir comment les autres sous-communs le résoudraient.
Voir la pyenv latest
pour plus de détails.
Pour les versions Python suivantes, PYENV applique des correctifs fournis par l'utilisateur qui ajoutent une prise en charge de certains environnements plus récents. Bien que nous ne maintenions pas activement ces correctifs, car les versions existantes ne changent jamais, il est sûr de supposer qu'ils continueront de travailler jusqu'à ce qu'il y ait d'autres changements incompatibles dans une version ultérieure de ces environnements.
Pour sélectionner un Python interdit PYENV comme version à utiliser, exécutez l'une des commandes suivantes:
pyenv shell <version>
- Sélectionnez juste pour la session de shell actuellepyenv local <version>
- Sélectionnez automatiquement chaque fois que vous êtes dans le répertoire actuel (ou ses sous-répertoires)pyenv global <version>
- Sélectionnez globalement pour votre compte d'utilisateurPar exemple, pour sélectionner le Python 3.10.4 nouvellement installé mentionné ci-dessus comme votre version préférée:
pyenv global 3.10.4
Maintenant, chaque fois que vous invoquez python
, pip
, etc., un exécutable de l'installation 3.10.4 fourni par PYENV sera exécuté à la place du système Python.
L'utilisation de " system
" comme nom de version réinitialiserait la sélection à votre Python fourni par le système.
Voir Comprendre les cales et comprendre la sélection de la version Python pour plus de détails sur le fonctionnement de la sélection et plus d'informations sur son utilisation.
Au fil du temps, vous accumulerez des versions Python dans votre répertoire $(pyenv root)/versions
.
Pour supprimer les anciennes versions Python, utilisez pyenv uninstall <versions>
.
Alternativement, vous pouvez simplement rm -rf
le répertoire de la version que vous souhaitez supprimer. Vous pouvez trouver le répertoire d'une version Python particulière avec la commande pyenv prefix
, par exemple pyenv prefix 2.6.8
. Notez cependant que les plugins peuvent exécuter des opérations supplémentaires sur la désinstallation que vous devez également faire à la main. Par exemple, Pyenv-VirtualEnv supprime également tous les environnements virtuels liés à la version désinstallée.
Exécutez pyenv commands
pour obtenir une liste de toutes les sous-communs disponibles. Exécutez une sous-commande avec --help
pour obtenir de l'aide dessus ou voir la référence des commandes.
Notez que les plugins PYENV que vous installez peuvent ajouter leurs propres sous-commandes.
Si vous avez installé PYENV à l'aide de Homebrew, mise à niveau en utilisant:
brew upgrade pyenv
Pour passer d'une version au dernier chef de développement de Pyenv, utilisez:
brew uninstall pyenv
brew install pyenv --head
Ensuite, vous pouvez le mettre à niveau avec brew upgrade pyenv
comme d'habitude.
Si vous avez installé PYENV avec PYENV-Installer, vous avez probablement le plugin PyenV-Update qui mettrait à niveau PYENV et tous les plugins installés:
pyenv update
Si vous avez installé PYENV en utilisant Pyenv-Installer ou Git Checkout, vous pouvez également mettre à niveau votre installation à tout moment à l'aide de GIT.
Pour passer à la dernière version de développement de PYENV, utilisez git pull
:
cd $( pyenv root )
git pull
Pour passer à une version spécifique de PYENV, consultez la balise correspondante:
cd $( pyenv root )
git fetch
git tag
git checkout v0.1.0
La simplicité de Pyenv facilite la désactiver temporairement ou la désinstallation du système.
Pour désactiver PYENV gérant vos versions Python, supprimez simplement les invocations pyenv init
de votre configuration de démarrage de shell. Cela supprimera le répertoire Pyenv Shims de PATH
, et les invocations futures comme python
exécuteront la version System Python, comme avant Pyenv.
pyenv
sera toujours accessible sur la ligne de commande, mais vos applications Python ne seront pas affectées par la commutation de version.
Pour désinstaller complètement PYENV, supprimez toutes les lignes de configuration PYENV de votre configuration de démarrage de shell, puis supprimez son répertoire racine. Cela supprimera toutes les versions Python qui ont été installées sous le $(pyenv root)/versions/
répertoire:
rm -rf $( pyenv root )
Si vous avez installé PYENV à l'aide d'un gestionnaire de packages, en dernière étape, effectuez la suppression du package PYENV. Par exemple, pour Homebrew:
brew uninstall pyenv
PYENV fournit un moyen simple d'étendre et de personnaliser ses fonctionnalités avec des plugins - aussi simples que de créer un répertoire de plugin et de supprimer un script shell sur un certain sous-chemin avec la logique supplémentaire dont vous avez besoin pour être exécuté à certains moments.
L'idée principale est que la plupart des choses que vous pouvez mettre sous $PYENV_ROOT/<whatever>
que vous pouvez également mettre sous $PYENV_ROOT/plugins/your_plugin_name/<whatever>
.
Voir les plugins sur le wiki sur la façon d'installer et d'utiliser des plugins ainsi qu'un catalogue de certains plugins existants utiles pour des besoins communs.
Voir les plugins en création du wiki sur l'écriture de vos propres plugins.
À un niveau élevé, PYENV intercepte les commandes Python à l'aide de SHIM Executids injectée dans votre PATH
, détermine la version Python spécifiée par votre application et transmet vos commandes à l'installation de Python correcte.
Lorsque vous exécutez une commande comme python
ou pip
, votre shell (bash / zshrc / ...) recherche via une liste de répertoires pour trouver un fichier exécutable avec ce nom. Cette liste des répertoires vit dans une variable d'environnement appelée PATH
, avec chaque répertoire de la liste séparée par un côlon:
/usr/local/bin:/usr/bin:/bin
Les répertoires de PATH
sont recherchés de gauche à droite, donc un exécutable correspondant dans un répertoire au début de la liste a la priorité sur un autre à la fin. Dans cet exemple, le répertoire /usr/local/bin
sera d'abord recherché, puis /usr/bin
, alors /bin
.
Pyenv fonctionne en insérant un répertoire de cales à l'avant de votre PATH
:
$(pyenv root)/shims:/usr/local/bin:/usr/bin:/bin
Grâce à un processus appelé remaniement , Pyenv maintient des cales dans ce répertoire pour correspondre à chaque commande python sur chaque version installée de Python - python
, pip
, etc.
Les cales sont des exécutables légers qui passent simplement votre commande à Pyenv. Ainsi, avec Pyenv installé, lorsque vous exécutez, disons, pip
, votre système d'exploitation fera ce qui suit:
PATH
pour un fichier exécutable nommé pip
pip
au début de votre PATH
pip
, qui passe à son tour la commande à PyenvLorsque vous exécutez une cale, Pyenv détermine quelle version Python à utiliser en la lisant à partir des sources suivantes, dans cet ordre:
La variable d'environnement PYENV_VERSION
(si spécifié). Vous pouvez utiliser la commande pyenv shell
pour définir cette variable d'environnement dans votre session de shell actuelle.
Le fichier .python-version
spécifique à l'application dans le répertoire actuel (si présent). Vous pouvez modifier le fichier .python-version
du répertoire actuel avec la commande pyenv local
.
Le premier fichier .python-version
trouvé (le cas échéant) en recherchant chaque répertoire parent, jusqu'à atteindre la racine de votre système de fichiers.
Le fichier global $(pyenv root)/version
. Vous pouvez modifier ce fichier à l'aide de la commande pyenv global
. Si le fichier de version globale n'est pas présent, PyenV suppose que vous souhaitez utiliser le "système" Python (voir ci-dessous).
Un nom de version spéciale " system
" signifie utiliser tout le python trouvé sur PATH
après l'entrée PATH
cale (en d'autres termes, tout ce qui serait exécuté si les cales Pyenv n'étaient pas sur PATH
). Notez que PYENV considère ces installations hors de sa volonté et n'essaye pas de les inspecter ou de les distinguer de quelque manière que ce soit. Donc, par exemple, si vous êtes sur macOS et que vous avez un Python 3.8.9 à HomeBrew et Python 3.9.12 et 3.10.2 - pour Pyenv, il s'agit toujours d'une version " system
" unique, et ce que celles-ci sont en premier allumé PATH
sous le nom exécutable que vous avez spécifié sera exécuté.
Remarque: vous pouvez activer plusieurs versions en même temps, y compris plusieurs versions de Python2 ou Python3 simultanément. Cela permet une utilisation parallèle de Python2 et Python3, et est nécessaire avec des outils comme tox
. Par exemple, pour demander à Pyenv d'utiliser d'abord votre système Python et Python3 (qui sont par exemple 2.7.9 et 3.4.2) mais ont également Python 3.3.6, 3.2.1 et 2.5.2 disponible, vous êtes d'abord pyenv install
le manquant Versions, ensuite définir pyenv global system 3.3.6 3.2.1 2.5.2
. Ensuite, vous pourrez invoquer l'une de ces versions avec un nom pythonX
ou pythonX.Y
approprié. Vous pouvez également spécifier plusieurs versions dans un fichier .python-version
à la main, séparées par Newlines. Les lignes commençant par un #
sont ignorées.
pyenv which <command>
affiche quel véritable exécutable serait exécuté lorsque vous invoquez <command>
via une cale. Par exemple si vous avez 3.3.6, 3.2.1 et 2.5.2 installé dont 3.3.6 et 2.5.2 sont sélectionnés et votre système Python est 3.2.5, pyenv which python2.5
devrait afficher $(pyenv root)/versions/2.5.2/bin/python2.5
, pyenv which python3
- $(pyenv root)/versions/3.3.6/bin/python3
et pyenv which python3.2
- chemin vers votre système python en raison de la chute (voir ci-dessous).
Les cales tombent également sur quelque chose de plus sur PATH
si l'exécutable correspondant n'est présent dans aucune des installations Python sélectionnées. Cela vous permet d'utiliser tous les programmes installés ailleurs sur le système tant qu'ils ne sont pas ombrés par une installation Python sélectionnée.
Une fois que PYENV a déterminé la version de Python que votre application a spécifiée, elle transmet la commande à l'installation Python correspondante.
Chaque version Python est installée dans son propre répertoire sous $(pyenv root)/versions
.
Par exemple, vous pourriez faire installer ces versions:
$(pyenv root)/versions/2.7.8/
$(pyenv root)/versions/3.4.2/
$(pyenv root)/versions/pypy-2.4.0/
En ce qui concerne PYENV, les noms de versions sont simplement des répertoires sous $(pyenv root)/versions
.
Sautez cette section à moins que vous ne sachiez ce que fait chaque ligne de votre profil de coquille.
Voir également la section Variables d'environnement pour les variables d'environnement qui contrôlent le comportement de Pyenv.
pyenv init
est la seule commande qui franchit la ligne de chargement des commandes supplémentaires dans votre shell. Venant de RVM, certains d'entre vous pourraient être opposés à cette idée. Voici ce que eval "$(pyenv init -)"
fait en fait:
Configure le chemin des cales. C'est ce qui permet à Pyenv d'intercepter et de rediriger les invocations de python
, pip
, etc. Il apprend $(pyenv root)/shims
sur votre $PATH
. Il supprime également toutes les autres instances de $(pyenv root)/shims
sur PATH
qui permet d'invoquer eval "$(pyenv init -)"
plusieurs fois sans obtenir des entrées PATH
en double.
Installe la complétion automatique. C'est entièrement facultatif mais assez utile. Sourcing $(pyenv root)/completions/pyenv.bash
le configurera. Il y a aussi des compléments pour Zsh et Fish.
Remanie des cales. De temps en temps, vous devrez reconstruire vos fichiers de cale. Le faisant sur init s'assure que tout est à jour. Vous pouvez toujours exécuter pyenv rehash
manuellement.
Installe pyenv
dans le shell actuel en fonction d'une fonction shell. Ce bit est également facultatif, mais permet à PYENV et aux plugins de modifier les variables dans votre shell actuel. Ceci est requis pour que certaines commandes comme pyenv shell
fonctionnent. Le SH Dispatcher ne fait rien de fou comme cd
de remplacement ou le piratage de votre invite de shell, mais si pour une raison quelconque, vous avez besoin pyenv
pour être un vrai script plutôt qu'une fonction Shell, vous pouvez le sauter en toute sécurité.
eval "$(pyenv init --path)"
ne fait que les éléments 1 et 3.
Pour voir exactement ce qui se passe sous le capot pour vous-même, exécutez pyenv init -
ou pyenv init --path
.
eval "$(pyenv init -)"
est censé s'exécuter à n'importe quel startup de coquille interactive (y compris les coquilles imbriquées - par exemple celles invoquées des éditeurs) afin que vous obteniez des fonctions de coquille d'achèvement et de commodité.
eval "$(pyenv init --path)"
peut être utilisé à la place de eval "$(pyenv init -)"
pour activer simplement les cales, sans intégration de coquille. Il peut également être utilisé pour baisser les cales à l'avant du PATH
après qu'une autre logique ait apparenté des trucs sur PATH
qui peut faire de l'ombre des cales de Pyenv.
~/.profile
apprend les répertoires bin
à utiliser par PATH
après avoir obtenu ~/.bashrc
. Cela nécessite d'ajouter un appel pyenv init
à ~/.profile
ainsi que ~/.bashrc
dans ces distributions car le PIP du système place les exécutables pour les modules installés par un utilisateur non root dans ces répertoires bin
par utilisateur. Si vous ne souhaitez pas utiliser pyenv init
et SHEMS, vous pouvez toujours bénéficier de la capacité de Pyenv à installer des versions Python pour vous. Exécutez simplement pyenv install
et vous trouverez des versions installées dans $(pyenv root)/versions
.
Vous pouvez les exécuter manuellement ou les symboliser selon les besoins, ou vous pouvez utiliser pyenv exec <command>
chaque fois que vous souhaitez que <command>
soit affecté par la sélection de version de PYENV comme actuellement configuré.
pyenv exec
fonctionne en affrontant $(pyenv root)/versions/<selected version>/bin
vers PATH
dans l'environnement de l'environnement <command>
, comme ce que fait RVM.
Vous pouvez affecter le fonctionnement de PYENV avec les variables d'environnement suivantes:
nom | défaut | description |
---|---|---|
PYENV_VERSION | Spécifie la version Python à utiliser. Voir aussi pyenv shell | |
PYENV_ROOT | ~/.pyenv | Définit le répertoire sous lequel résident les versions et cales Python. Voir aussi pyenv root |
PYENV_DEBUG | SORTIE DES INFORMATIONS DE DÉBUG. Aussi comme: pyenv --debug <subcommand> | |
PYENV_HOOK_PATH | voir wiki | Liste des chemins séparés par le côlon recherché des crochets pyenv. |
PYENV_DIR | $PWD | Répertoire pour commencer à rechercher des fichiers .python-version . |
Voir également les variables d'environnement spéciales dans la lecture de Python-Build pour les variables d'environnement qui peuvent être utilisées pour personnaliser la construction.
Le code source PYENV est hébergé sur GitHub. Il est propre, modulaire et facile à comprendre, même si vous n'êtes pas un pirate de coquille.
Les tests sont exécutés à l'aide de chauves-souris:
bats test
bats/test/<file>.bats
N'hésitez pas à soumettre des demandes de traction et à déposer des bogues sur le tracker du problème.
Voir contribution.md pour plus de détails sur la soumission des modifications.
Voir Changelog.md.
La licence MIT