Aller au contenu

Gérer les Versions de Python avec Pyenv

Mise à jour :

logo python

Dans le développement logiciel, il est fréquent de devoir gérer plusieurs versions de Python sur une même machine. Cela peut être nécessaire pour maintenir des projets hérités, tester des fonctionnalités sur des versions plus récentes, ou simplement collaborer avec des équipes utilisant des environnements différents. Pyenv est un outil puissant qui simplifie cette gestion en permettant l’installation, la mise à jour et la sélection de versions spécifiques de Python. Grâce à Pyenv, vous pouvez basculer aisément entre différentes versions de Python, tout en gardant votre environnement de développement propre et organisé.

Fonctionnalités de Pyenv

Pyenv offre une variété de fonctionnalités qui le rendent indispensable pour gérer les versions de Python :

  • Installation de versions multiples : Installez et gérez facilement plusieurs versions de Python côte à côte sur votre machine.
  • Définition de versions globales et locales : Choisissez une version globale de Python pour l’ensemble du système, ou définissez une version spécifique pour un projet particulier avec pyenv local.
  • Isolation des environnements : Créez des environnements virtuels isolés avec pyenv virtualenv pour des projets distincts.
  • Compatibilité avec les plugins : Étendez les fonctionnalités de Pyenv avec des plugins comme pyenv-virtualenv pour une gestion avancée des environnements virtuels.
  • Mise à jour et désinstallation facile : Mettez à jour les versions de Python ou désinstallez celles qui ne sont plus nécessaires avec des commandes simples.
  • Support des builds personnalisés : Compilez des versions spécifiques de Python avec des options de configuration personnalisées pour répondre à des besoins particuliers.

Ces fonctionnalités permettent aux développeurs de personnaliser et de contrôler leur environnement Python de manière flexible, adaptée aux besoins spécifiques de chaque projet.

Pourquoi avoir plusieurs versions de Python ?

Dans un environnement DevOps, la capacité à gérer plusieurs versions de Python sur un même poste de développeur est essentielle pour plusieurs raisons :

  • Compatibilité des projets : Différents projets peuvent nécessiter différentes versions de Python en fonction des bibliothèques ou des frameworks utilisés. Par exemple, un projet plus ancien peut fonctionner uniquement avec Python 2.7, tandis qu’un nouveau projet exploite les dernières fonctionnalités de Python 3.12.
  • Tests et intégration continue : Dans le cadre des pipelines CI/CD, il est important de tester le code sur plusieurs versions de Python pour garantir sa compatibilité et éviter les régressions. En utilisant Pyenv, un développeur peut facilement passer d’une version à l’autre pour reproduire des environnements de test.
  • Migrations et mises à jour : Lors de la mise à jour d’une application vers une nouvelle version de Python, il est nécessaire de tester progressivement pour identifier et corriger les problèmes potentiels. Avoir plusieurs versions disponibles permet de migrer les applications en douceur sans perturber les environnements de production.
  • Conformité avec les équipes et les environnements de production : En DevOps, il est fréquent de synchroniser l’environnement local avec celui des serveurs de production. Si la production utilise une version spécifique de Python, les développeurs doivent pouvoir configurer la même version pour éviter les problèmes de déploiement.

Installation de Pyenv

Pyenv est un outil incontournable pour les développeurs souhaitant gérer plusieurs versions de Python sur une même machine. Avant de l’installer, vous devez préparer votre système en installant quelques dépendances essentielles. Ces dépendances permettent à Pyenv de compiler Python à partir des sources, assurant ainsi une compatibilité optimale avec votre environnement.

Pour les systèmes basés sur Ubuntu ou Debian, les dépendances nécessaires peuvent être installées avec la commande suivante :

Terminal window
sudo apt install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev \
liblzma-dev python3-openssl

Les utilisateurs de Fedora, CentOS ou RHEL utiliseront cette commande :

Terminal window
sudo yum install -y zlib-devel bzip2 bzip2-devel readline-devel \
sqlite sqlite-devel openssl-devel xz xz-devel libffi-devel gcc make

Pour Alpine Linux, la commande suivante est recommandée :

Terminal window
apk add libffi-dev ncurses-dev openssl-dev readline-dev \
tk-dev xz-dev zlib-dev

Une fois ces dépendances installées, vous pouvez procéder à l’installation de Pyenv en utilisant un script fourni par les mainteneurs du projet :

Terminal window
curl https://pyenv.run | bash

Ce script télécharge et installe Pyenv, ainsi que les plugins pyenv-virtualenv et pyenv-doctor, qui ajoutent des fonctionnalités supplémentaires pour la gestion des environnements virtuels et le diagnostic des installations.

Après l’installation, vous devez configurer votre environnement en ajoutant les lignes suivantes à votre fichier de configuration de shell (.bashrc, .zshrc, etc.) :

Terminal window
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"

Ces commandes garantissent que Pyenv est disponible chaque fois que vous ouvrez un nouveau terminal. Vous pouvez vérifier que Pyenv est correctement installé en exécutant :

Terminal window
pyenv --version

Si tout est en ordre, vous êtes prêt à commencer à utiliser Pyenv pour gérer vos versions de Python.

Gestion des versions de Python avec Pyenv

Pyenv simplifie la gestion des différentes versions de Python sur une seule machine, offrant ainsi une flexibilité maximale pour le développement.

Lister les versions disponibles

Pour commencer, vous pouvez lister toutes les versions de Python disponibles à l’installation avec la commande suivante :

Terminal window
pyenv install --list

Cette commande affiche une liste exhaustive des versions de Python que vous pouvez installer, y compris les versions stables, les versions de développement et même les versions spécifiques à Anaconda.

Installer une version spécifique de Python

Une fois la version désirée identifiée, vous pouvez l’installer avec une commande simple. Par exemple, pour installer Python 3.12.0 :

Terminal window
pyenv install 3.12.0

L’installation est totalement isolée, ce qui signifie que vous pouvez installer plusieurs versions sans qu’elles ne se chevauchent ou n’entrent en conflit.

Définir une version globale de Python

Après avoir installé plusieurs versions de Python, vous pouvez définir une version globale qui sera utilisée par défaut sur tout le système :

Terminal window
pyenv global 3.12.0

Cela met à jour le lien symbolique de Python dans votre environnement pour pointer vers cette version. Si vous avez besoin de revenir à une autre version globale, vous pouvez simplement changer la version par défaut avec la même commande.

Utiliser une version locale spécifique

Si vous travaillez sur un projet particulier qui nécessite une version spécifique de Python, vous pouvez configurer Pyenv pour utiliser cette version uniquement dans le répertoire du projet :

Terminal window
pyenv local 3.10.8

Cela crée un fichier .python-version dans le répertoire, indiquant à Pyenv de basculer automatiquement vers la version spécifiée lorsque vous travaillez dans ce dossier.

Changement rapide entre les versions

Vous pouvez facilement passer d’une version de Python à une autre avec la commande :

Terminal window
pyenv shell 3.8.10

Cette commande modifie la version active de Python pour la session en cours uniquement, sans affecter les paramètres globaux ou locaux.

Utilisation des versions locales de Python

Pyenv permet de définir une version spécifique de Python pour un répertoire ou un projet donné, ce qui est particulièrement utile lorsque vous travaillez sur des projets nécessitant des versions différentes. Cette fonctionnalité garantit que chaque projet utilise la version exacte de Python pour laquelle il a été conçu, sans interférer avec d’autres projets ou la version globale de Python installée sur votre machine.

Configuration d’une version locale

Pour définir une version locale de Python dans un répertoire spécifique, utilisez la commande suivante :

Terminal window
pyenv local 3.10.8

Cette commande crée un fichier caché nommé .python-version dans le répertoire courant. Ce fichier contient simplement le numéro de version de Python que Pyenv doit utiliser chaque fois que vous êtes dans ce répertoire. Par exemple, si vous définissez Python 3.10.8 comme version locale, chaque fois que vous exécutez une commande Python ou pip dans ce répertoire, Pyenv activera automatiquement la version 3.10.8.

Travailler avec plusieurs projets

Si vous avez plusieurs projets nécessitant des versions différentes de Python, Pyenv facilite la gestion en assurant que chaque projet utilise sa propre version définie localement. Il vous suffit de naviguer vers le répertoire de votre projet et Pyenv utilisera la version locale configurée :

  • Projet A : Python 3.8.10 (pyenv local 3.8.10)
  • Projet B : Python 3.10.8 (pyenv local 3.10.8)

Cela élimine les risques de conflit entre les versions, car chaque projet fonctionne dans un environnement parfaitement adapté à ses besoins.

Temporairement ignorer la version locale

Si vous devez temporairement ignorer la version locale de Python et utiliser une autre version pour une tâche spécifique, vous pouvez le faire en utilisant la commande pyenv shell :

Terminal window
pyenv shell 3.12.0

Cela force Pyenv à utiliser Python 3.12.0 pour la session en cours, sans modifier les paramètres locaux ou globaux définis.

Suppression de la version locale

Si vous n’avez plus besoin d’une version locale pour un projet, vous pouvez simplement supprimer le fichier .python-version du répertoire. Cela permettra à Pyenv de revenir à la version globale par défaut ou à la version définie dans un répertoire parent, si applicable.

Terminal window
rm .python-version

Gestion des environnements virtuels avec Pyenv

Pyenv ne se limite pas à la gestion des versions de Python ; il offre également une puissante fonctionnalité pour la gestion des environnements virtuels grâce au plugin pyenv-virtualenv. Un environnement virtuel permet de créer un espace isolé où vous pouvez installer des bibliothèques et des dépendances spécifiques à un projet, sans interférer avec d’autres projets ou la configuration globale de votre système.

Installation de pyenv-virtualenv

Si ce n’est pas déjà fait, vous pouvez installer pyenv-virtualenv avec Homebrew (pour macOS) ou en clonant le dépôt GitHub directement dans le répertoire des plugins de Pyenv :

Terminal window
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

Après l’installation, assurez-vous que les lignes de configuration nécessaires pour pyenv-virtualenv sont présentes dans votre fichier .bashrc ou .zshrc :

Terminal window
eval "$(pyenv init --path)"
eval "$(pyenv virtualenv-init -)"

Ces lignes garantissent que pyenv-virtualenv est activé chaque fois que vous ouvrez un nouveau terminal.

Création d’un environnement virtuel

Pour créer un nouvel environnement virtuel, il suffit d’utiliser la commande suivante :

Terminal window
pyenv virtualenv 3.12.0 myenv-3.12

Cette commande crée un environnement virtuel nommé myenv-3.12 basé sur Python 3.12.0. Vous pouvez utiliser un nom plus descriptif pour refléter le projet ou l’objectif spécifique de cet environnement.

Activation et désactivation d’un environnement virtuel

Une fois l’environnement virtuel créé, vous pouvez l’activer avec la commande suivante :

Terminal window
pyenv activate myenv-3.12

Cela vous permet de travailler dans cet environnement isolé, où toutes les installations de packages se feront dans cet espace sans affecter le reste de votre système. Pour désactiver l’environnement et revenir à la version de Python précédemment active, il suffit d’exécuter :

Terminal window
pyenv deactivate

Gestion des environnements multiples

Vous pouvez créer et gérer autant d’environnements virtuels que nécessaire pour vos différents projets. Pyenv vous permet de basculer rapidement entre eux, ce qui est particulièrement utile lorsque vous travaillez sur plusieurs projets en parallèle nécessitant des configurations distinctes.

Suppression d’un environnement virtuel

Lorsque vous n’avez plus besoin d’un environnement virtuel, vous pouvez le supprimer avec la commande suivante :

Terminal window
pyenv uninstall myenv-3.12

Cela libère de l’espace sur votre disque et vous aide à garder votre système organisé.

Mise à jour et désinstallation de versions Python

Pyenv rend les opérations de mise à jour et de désinstallation des versions de Python simples et efficaces, vous permettant de maintenir un environnement de développement à jour et bien organisé.

Mise à jour de Pyenv

Avant de mettre à jour les versions de Python, il est recommandé de vérifier que Pyenv lui-même est à jour.

Si vous avez installé Pyenv manuellement, vous pouvez le mettre à jour en exécutant les commandes suivantes dans le répertoire de Pyenv :

Terminal window
cd $(pyenv root)
git pull

Cela vous garantit d’avoir accès aux dernières fonctionnalités et corrections de bugs.

Mise à jour des versions de Python

Pour mettre à jour une version spécifique de Python, il vous suffit de la réinstaller en utilisant la commande pyenv install avec la version la plus récente souhaitée. Par exemple, pour mettre à jour vers Python 3.12.1 :

Terminal window
pyenv install 3.12.1

Si vous avez un environnement virtuel basé sur une version plus ancienne que vous souhaitez mettre à jour, vous devrez créer un nouvel environnement avec la version mise à jour et réinstaller les dépendances nécessaires.

Désinstallation d’une version de Python

Lorsque vous n’avez plus besoin d’une version spécifique de Python, vous pouvez la désinstaller pour libérer de l’espace et réduire l’encombrement. Pour ce faire, utilisez la commande suivante :

Terminal window
pyenv uninstall 3.10.8

Cette commande supprimera complètement la version spécifiée, y compris toutes les bibliothèques installées associées.

Nettoyage des environnements

Après avoir désinstallé une version de Python, il peut être utile de vérifier et de nettoyer les anciens environnements virtuels qui ne sont plus nécessaires. Cela garantit que votre système reste organisé et que vous ne conservez pas de fichiers inutiles.

Dépannage et résolution des erreurs courantes

Malgré la puissance et la flexibilité de Pyenv, il est possible de rencontrer des problèmes lors de l’installation ou de l’utilisation de différentes versions de Python. Voici quelques erreurs courantes et leurs solutions.

Erreurs de compilation

Lorsque vous installez une version de Python avec Pyenv, vous pouvez rencontrer des erreurs de compilation dues à des dépendances manquantes ou obsolètes.

Conflits de versions

Il est possible de rencontrer des conflits entre les versions globales et locales de Python. Par exemple, si vous définissez une version locale, mais que Pyenv continue à utiliser une autre version, assurez-vous que le fichier .python-version est présent dans le répertoire et qu’il contient bien la version souhaitée. Vous pouvez également forcer Pyenv à réinitialiser les versions actives en utilisant :

Terminal window
pyenv rehash

Cela régénère tous les fichiers d’exécution pour les versions installées, assurant que les bonnes versions sont appelées.

Problèmes de chemin (PATH)

Si Pyenv ne semble pas fonctionner correctement, il se peut que votre configuration de shell ne soit pas correctement configurée pour charger Pyenv au démarrage. Assurez-vous que les lignes suivantes sont bien présentes dans votre fichier .bashrc, .zshrc, ou .bash_profile :

Terminal window
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"

Après avoir ajouté ces lignes, rechargez votre shell avec la commande source ~/.bashrc (ou le fichier approprié) ou redémarrez votre terminal.

Diagnostic avec pyenv-doctor

Pour une analyse plus approfondie, Pyenv propose un plugin appelé pyenv-doctor qui vérifie la configuration de votre environnement. Installez-le et exécutez-le pour identifier les problèmes potentiels :

Terminal window
pyenv install pyenv-doctor
pyenv doctor

Cela vous donnera une liste de vérifications et de recommandations pour corriger tout problème détecté.

Conclusion

Pyenv est un outil indispensable pour tout développeur Python souhaitant gérer efficacement différentes versions du langage sur une même machine. En permettant l’installation, la mise à jour et la gestion d’environnements virtuels spécifiques, Pyenv offre une flexibilité indispensable pour adapter vos environnements de développement à chaque projet. Que vous soyez en train de tester des nouvelles versions de Python, de maintenir des projets plus anciens, ou simplement d’explorer des environnements isolés, Pyenv vous fournit les outils nécessaires pour optimiser votre flux de travail.

Ressources supplémentaires

Pour approfondir vos connaissances et tirer le meilleur parti de Pyenv, consultez les ressources suivantes :