19 points par GN⁺ 2024-03-26 | 7 commentaires | Partager sur WhatsApp
  • Permet de basculer facilement entre plusieurs versions de Python
  • Suit la tradition UNIX des outils à but unique : simples, discrets et efficaces
  • Ce projet est un fork de rbenv et ruby-build, adapté à Python

Ce que fait pyenv

  • Permet de changer la version globale de Python au niveau utilisateur.
  • Prend en charge des versions de Python par projet.
  • Permet de surcharger la version de Python à l’aide de variables d’environnement.
  • Peut rechercher plusieurs versions des commandes Python en une seule fois. Utile pour tester entre différentes versions de Python avec tox.

Ce que pyenv ne fait pas...

  • Ne dépend pas de Python lui-même. pyenv est écrit en pur script shell.
  • N’a pas besoin d’être chargé dans le shell. À la place, il utilise une approche par shim en ajoutant un répertoire au PATH.
  • Ne gère pas virtualenv. Bien sûr, l’utilisateur peut créer lui-même un virtualenv ou automatiser cela avec pyenv-virtualenv.

Fonctionnement

  • pyenv intercepte les commandes Python via des exécutables shim injectés dans le PATH, détermine la version de Python demandée par l’application, puis transmet la commande à cette installation Python.

Comprendre le PATH

  • Quand vous exécutez une commande comme python ou pip, le système d’exploitation cherche un exécutable portant ce nom dans la liste de répertoires définie par la variable d’environnement PATH.

Comprendre les shims

  • pyenv insère le répertoire shims en tête du PATH. Grâce au processus de rehashing, il maintient des shims pour toutes les commandes Python de toutes les versions de Python installées.

Comprendre la sélection de la version de Python

  • Lorsqu’un shim est exécuté, pyenv lit et utilise la version de Python depuis les sources suivantes, dans cet ordre :
    1. La variable d’environnement PYENV_VERSION (si elle est définie).
    2. Le fichier .python-version propre à l’application dans le répertoire courant (s’il existe).
    3. Le premier fichier .python-version trouvé en remontant les répertoires parents jusqu’à la racine du système de fichiers (s’il existe).
    4. Le fichier global $(pyenv root)/version.

Trouver l’emplacement des installations Python fournies par pyenv

  • pyenv transmet la commande vers l’installation Python correspondant à la version qu’il a déterminée.
  • Chaque version de Python est installée dans son propre répertoire sous $(pyenv root)/versions.

Utilisation

Installer des versions supplémentaires de Python

  • Utilisez pyenv install pour installer des versions supplémentaires de Python.

Résolution automatique vers la dernière version

  • Toutes les sous-commandes de Pyenv, à l’exception de uninstall, résolvent automatiquement un préfixe complet vers la dernière version.

Versions de Python avec prise en charge étendue

  • Certaines versions de Python appliquent des correctifs fournis par les utilisateurs afin d’ajouter la prise en charge de certains environnements.

Basculer entre les versions de Python

  • Pour utiliser une version de Python installée par Pyenv, exécutez l’une des commandes suivantes :
    • pyenv shell
    • pyenv local
    • pyenv global

Supprimer une version de Python

  • Avec le temps, des versions de Python s’accumulent dans le répertoire $(pyenv root)/versions.
  • Pour supprimer une ancienne version de Python, utilisez pyenv uninstall .

Autres tâches

  • Pour afficher la liste de toutes les sous-commandes disponibles, exécutez pyenv commands.

Suppression de pyenv

  • Il est facile de désactiver temporairement Pyenv ou de le supprimer du système.

Plugins Pyenv

  • Les plugins permettent d’étendre et de personnaliser les fonctionnalités de Pyenv de manière simple, flexible et maintenable.

Configuration avancée

  • Des variables d’environnement permettent de contrôler le comportement de Pyenv.

Développement

  • Le code source de Pyenv est hébergé sur GitHub.
  • Les tests s’exécutent avec Bats.

Avis de GN⁺

  • pyenv est un outil très utile pour gérer plusieurs versions de Python. Il est particulièrement pratique pour les développeurs qui doivent utiliser des versions différentes de Python selon les projets.
  • Comme cet outil ne dépend pas de Python lui-même et repose sur de simples scripts shell, il peut être installé et administré même sur des systèmes où Python n’est pas installé.
  • pyenv ne gère pas directement virtualenv, mais le plugin pyenv-virtualenv permet d’automatiser cette gestion, ce qui le rend pratique.
  • Son installation et son utilisation sont relativement simples, ce qui le rend accessible même aux ingénieurs logiciel débutants ayant besoin de gérer des versions de Python.
  • Parmi les autres outils offrant des fonctions similaires à pyenv, on trouve conda, largement utilisé notamment en data science et en machine learning. Comme conda combine gestion des paquets et des environnements, il peut être recommandé aux utilisateurs qui ont besoin de ces fonctionnalités.
  • Lors de l’adoption de pyenv, il faut faire attention à éviter les conflits de chemins si plusieurs versions de Python sont installées sur le système. L’avantage de pyenv est la simplicité de la gestion des versions, mais une mauvaise configuration peut perturber le chemin Python par défaut du système.

7 commentaires

 
koxel 2024-03-26

Avec conda, il faut faire attention : dans les entreprises d’une certaine taille, la solution est payante.
Même si l’entreprise est petite, si le donneur d’ordre est de grande taille, cela devient délicat pour livrer.

 
koxel 2024-03-26

conda lui-même est gratuit sous licence BSD, mais il faut bien vérifier les licences du dépôt et des paquets.

 
tujuc 2024-03-26

Je configure asdf au niveau supérieur : https://asdf-vm.com/

Et selon les projets, je le configure aussi en local, ou bien j’utilise des conteneurs...

Comme il y a désormais beaucoup de nouvelles solutions pour mettre en place et gérer des environnements, je ne l’utilise plus vraiment en ce moment... haha

 
sngwn 2024-03-26

C’est exactement comme ça que je l’utilise aussi.
Haha, personnellement, j’ai l’impression que pyenv est devenu un peu vieillissant.

 
joyfui 2024-03-26

Comme des choses comme rbenv, pyenv, nodenv continuaient d’apparaître, il a finalement aussi fallu créer anyenv. haha
https://github.com/anyenv/anyenv

 
GN⁺ 2024-03-26
Avis sur Hacker News
  • Avertissement sur l'utilisation de pyenv

    • pyenv a le gros inconvénient de compiler Python sur la machine de l'utilisateur.
    • Il existe énormément de modes d'échec possibles dans cette situation.
    • pyenv n'est pas un outil destiné aux débutants pour résoudre les problèmes de packaging Python, mais un outil pour experts visant à standardiser les configurations.
    • Beaucoup d'utilisateurs rencontrent des problèmes causés par pyenv sans s'en rendre compte.
  • La souffrance des programmeurs Python

    • Étonnement face aux difficultés inutiles que subissent les programmeurs Python.
    • Devoir installer plusieurs versions de Python est irrationnel.
    • L'idée qu'un programme Python fonctionne partout n'est pas pratique.
    • Tout est fragile et ne fonctionne pas sans la version exacte du langage.
    • Les problèmes de dépendances sont si graves qu'on en arrive à avoir besoin d'un gestionnaire de gestionnaires de paquets.
  • Les outils pour garder les programmes Python stables

    • Liste d'outils qui garantissent qu'un programme Python continue de fonctionner exactement comme lorsqu'il a été écrit.
    • On y trouve divers outils comme requirements.txt, pip, pipenv, pyenv, virtualenv, etc.
  • Présentation de l'outil Mise

    • Écrit en Rust, Mise est comme asdf mais plus rapide et sans shims par défaut.
    • Il installe les runtimes en parallèle et télécharge les plugins nécessaires.
    • Il peut être utilisé comme un meilleur outil qu'asdf ou pyenv.
  • Les avantages d'ASDF

    • ASDF prend en charge non seulement Python, mais aussi plusieurs langages et divers outils comme Rust, Go et Node.
  • Retour d'expérience sur l'utilisation de pyenv

    • Au début, il n'y avait pas de problème avec pyenv, mais des problèmes sont apparus après l'installation de plusieurs versions de Python.
    • Au lieu de pyenv, il est plus stable de télécharger Python depuis python.org et de gérer les environnements virtuels avec python<version> -m venv /my/virtual/env.
  • Stack personnelle de gestion Python

    • Gestion des versions de Python avec pyenv, puis création d'un nouvel environnement virtuel avec venv pour chaque projet.
    • Poetry est utilisé pour l'initialisation du projet et la gestion des dépendances.
    • Si vous utilisez Dropbox, ajoutez le dossier .venv à la liste d'exclusion.
    • Pyenv fonctionne bien sur Ubuntu une fois toutes les dépendances nécessaires réunies.
  • Gestion des dépendances d'exécution avec Mise

    • Utilisation de mise pour gérer de la même manière la plupart des dépendances d'exécution comme Python, Node, Ruby et Terraform.
    • Les environnements virtuels Python peuvent aussi être activés.
  • Partage d'un workflow macOS

    • Téléchargement des binaires Python nécessaires depuis python.org, puis configuration des environnements virtuels avec virtualenv.
    • Gestion du projet avec pyproject.toml et pip-compile.
    • L'espace de gestion des projets Python a beaucoup changé, mais ce workflow a permis d'ignorer toutes ces évolutions.
 
edunga1 2024-03-26

Il existe énormément de modes de défaillance possibles dans cette situation.

J’ai l’impression que c’est vraiment là que ça devient très pénible.