====== PYENV ====== Les [[virtualenv|environnements virtuels]] sont pratiques pour isoler un applicatif et ses dépendances d'un autre applicatif ou du système hôte, néanmoins `venv` est un module de python, et donc l'environnement installé sera lié à la version de python du système.\\ Cela peut poser plusieurs problèmes : * Sur un système particulièrement stable (comme centos), on sera bloqué à une version de python probablement obsolète * Sur un système plus vivant (comme archlinux), la version de python risque d'évoluer "rapidement" et notre belle appli en python 3.9 n'est plus fonctionnelle car les modules du virtualenv installés pour python 3.9 ne sont plus compatibles avec la version de python du système (ex: 3.11) C'est l'un des avantages de [[conda]], avoir une sorte de package manager qui permet d'installer des environnements virtuels de python comme des distributions (linux), avec n'importe quelle version de python, et même de gérer les maj au sein de ces environnements virtuels.\\ Cependant, à l'usage on remarque que conda prend //beaucoup// de place. `pyenv` est une solution alternative, très dans l'esprit unix (ne vise qu'une unique fonctionnalité), et qui permet la cohabitation de plusieurs versions de python sur sa machine, et ce sans perturber la version de python du système. ===== Installer et configure `pyenv` ===== Archlinux propose un paquet tout fait, installation via pacman : pacman -S pyenv pyenv va télécharger les sources de python et les compiler, il faut donc également installer les libs pour permettre la bonne compilation : pacman -S --needed base-devel openssl zlib xz tk Il faut ensuite configurer pyenv, et notamment son shell, ça se passe dans `.bashrc` export PYENV_ROOT="$HOME/.pyenv" command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" En gros, les versions de python seront installés et accessibles depuis son home : `~/.pyenv/` ===== Utiliser pyenv au quotidien dans un SHELL ===== # Installer une version spécifique de python pyenv install 3.11 pyenv install 3.11.5 # Voir les versions installées pyenv versions # Voir toutes les versions possibles pyenv install --list # grep " 3\.[678]" pour filtrer sur les version 3.6 3.7 ou 3.8; grep "jython" # note : d'autres interpréteurs que CPython sont disponibles : Ipython, hython, miniconda... # Activer une version pour cette session shell # similaire à un "conda activate " pyenv shell 3.8 # Activer une version par défaut à l'avenir pyenv global 3.11.6 # note : utiliser la version "system" reset la sélection à la version fournie par l'os # Activer une version pour le dossier actuel pyenv local 3.12 # note: crée un fichier .python-version dans ce dossier qui précisera à pyenv quelle version utiliser dans ce dossier # Connaître la version actuellement en cours d'utilisation pyenv version # Supprimer une version de python pyenv uninstall 3.5.8 ===== Pyenv avec un virtualenv ===== ==== Dans un shell ==== Il convient d'abord d'activer la version de python qui nous convient (voir paragraphe précédent), puis d'utiliser `venv` comme décrit dans la page sur les [[virtualenv]].\\ Par exemple pour un déploiement en prod (même si certains aiment les outils à la hype plus élevée comme [[https://python-poetry.org/|poetry]], mais j'aime les choses simples, sans avoir besoin d'installer des tas de choses. On peut aussi utiliser un plugin de pyenv, [[https://github.com/pyenv/pyenv-virtualenv|pyenv-virtualenv]], mais je n'ai pas approfondi le sujet. ==== Dans pycharm ==== Pycharm permet d'utiliser plusieurs outils pour créer, utiliser des environnements virtuels, à ce jour (6/11/2023) : `virtualenv` (packagé de base avec pycharm), `conda`, `pipenv`, `poetry`.\\ On notera que `venv` n'est pas disponible, on utilisera `virtualenv` qui est un cousin proche. Dans la fenêtre virtualenv, on peut sélectionner l'executable python ("Base interpreter"). Il suffit d'aller chercher dans le dossier `~.pyenv/versions/3.12.0/bin/python3`