URL: https://linuxfr.org/news/environnement-moderne-de-travail-python Title: Environnement moderne de travail Python Authors: sispheor palm123, Pierre Jarillon, Ysabeau, Nils Ratusznik et ted Date: 2022-05-19T17:05:36+02:00 License: CC By-SA Tags: python3 Score: 3 # Environnement moderne de travail Python Si vous développez ou utilisez des programmes s’exécutant au-dessus de l’interpréteur Python, il peut arriver que vous vous retrouviez avec un environnement très dégradé sur votre poste de travail.. Je propose ici de découvrir un ensemble d’outils permettant de configurer des environnements Python qui vous éviteront de polluer votre système ou vos futurs environnements de développement. En effet, entre votre système Linux et les multiples projets de développement sur lequel vous travaillez vous avez souvent besoin d’interpréteur Python dans des versions différentes ou de librairies dans des versions particulières. Dans ce guide, nous allons voir comment installer un environnement Python répondant aux cas d’usage suivants : - gestion facile de multiple versions de l’interpréteur Python ; - isolation d’applications CLI basées sur Python ; - création d’environnements de développement isolés les uns des autres. ---- ---- # Installation de l’environnement Nous allons utiliser les outils suivants: - pyenv ; - pip ; - pipx ; - poetry. ## Pyenv [Pyenv](https://github.com/pyenv/pyenv) est un outil qui permet d’installer et gérer facilement vos interpréteurs Python. Il vous permet d’utiliser un interpréteur qui n’est pas celui de votre système. Les distributions Linux sont souvent livrées avec un Python pré-installé (généralement sous /bin/python) permettant de gérer des programmes nécessaires au bon fonctionnement de votre système. Certains de ces programmes sont critiques et il est donc recommandé de **ne pas toucher à l’interpréteur natif de votre système Linux**. Installation de Pyenv ```bash curl https://pyenv.run | bash ``` Une fois installé, il faut modifier la configuration de votre shell afin qu’il initialise Pyenv à chaque ouverture de terminal. Ajoutez ces lignes a votre bashrc (ou zshrc): ```bash export PYENV_ROOT="$HOME/.pyenv" command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" ``` Ouvrez un nouveau terminal et testez que pyenv : ```bash pyenv pyenv 2.3.0 ``` Pour installer une version particulière de Python, utilisez la commande `pyenv install`. Par exemple : ```bash pyenv install 3.9.10 ``` Vous pouvez lister les versions de Python installées ```bash pyenv versions ``` ## Pip Pip est tout simplement un installeur de librairie Python disponible sur [https://pypi.org/](https://pypi.org/). On télécharge l’installeur officiel : ```bash wget https://bootstrap.pypa.io/get-pip.py ``` On le lance (avec le python3 du système) ```bash sudo python3 get-pip.py ``` On vérifie que pip3 est bien installé pour notre interpréteur système ```bash pip3 --version pip 22.1 from /usr/local/lib/python3.10/dist-packages/pip (python 3.10) ``` ## Pipx [Pipx](https://pypa.github.io/pipx/) permet d’installer des outils CLI dans des environnements isolés et les expose de la même façon que s’ils avaient été installés par pip ou un paquet système. Très pratique pour éviter les conflits entre plusieurs outils de CLI qui reposent souvent sur des librairies open-source communes mais dans des versions différentes. Il permet aussi d’installer plusieurs versions différentes d’une application CLI. Installation du paquet `venv` qui permet de créer des environnements virtuels. Cette librairie est utilisée par pipx pour isoler les installations. ```bash sudo apt install python3-venv ``` Installation de pipx via pip ```bash sudo pip3 install pipx virtualenv ``` Pipx expose les applications qu’il installe en ajoutant un lien dans le chemin `~/.local/bin`. Il faut donc ajouter ce chemin à votre « PATH ». Dans votre bashrc (ou zshrcè) : ```bash export PATH="$PATH:$HOME/.local/bin/" ``` On va à présent installer une application basée sur Python. Prenons par exemple Ansible. Ici, nous précisons à pipx d’utiliser l’interpréteur Python installé avec Pyenv précédemment : ```bash pipx install --python /home/nico/.pyenv/versions/3.9.10/bin/python3.9 ansible --include-deps ``` Ansible est à présent installé dans un environnement virtuel. Les bibliothèques qu’il utilise sont isolées des bibliothèques Python utilisées par le système. Pour lister les programmes que vous avez installés via pipx : ```bash pipx list ``` Si le programme que vous avez installé a lui-même besoin d’autres bibliothèques Python pour fonctionner, c’est le cas, par exemple, avec Ansible dont les modules reposent parfois sur des bibliothèques communautaires, vous pouvez les injecter dans l’environnement virtuel. Dans cet exemple, on injecte les bibliothèques pyvmomi, python-ldap, kubernetes et hvac à notre environnement `ansible` : ```bash pipx inject ansible pyvmomi python-ldap kubernetes hvac ``` Il est possible également de gérer plusieurs versions d’un même programme et de l’exposer au système avec un suffixe différent. Ainsi, je souhaite installer la dernière version d’Ansible (Ansible 5) tout en gardant la première version installée : ```bash pipx install --suffix -5 --python /home/nico/.pyenv/versions/3.9.10/bin/python3.9 --include-deps ansible ``` La commande `ansible-playbook` pour cette version est alors exposée sous `ansible-playbook-5`. ```bash ansible-playbook-5 --version ansible-playbook [core 2.12.5] config file = None configured module search path = ['/home/nico/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /home/nico/.local/pipx/venvs/ansible/lib/python3.9/site-packages/ansible ansible collection location = /home/nico/.ansible/collections:/usr/share/ansible/collections executable location = /home/nico/.local/bin//ansible-playbook python version = 3.9.10 (main, May 19 2022, 14:16:15) [GCC 11.2.0] jinja version = 3.1.2 libyaml = True ``` ## Poetry [Poetry](https://python-poetry.org/) est un gestionnaire de dépendances Python. C’est une sorte de pip++. Il permet d’installer des librairies Python, de s’assurer que l’environnement de développement d’un projet soit isolé et identique pour tous les développeurs, de gérer les conflits d’installation ou encore de publier son paquet Python. Poetry est un outil CLI écrit en Python, pour l’installation nous pouvons donc utiliser pipx : ```bash pipx install poetry ``` On vérifie l’installation ```bash poetry --version Poetry version 1.1.13 ``` Création d’un projet ```bash poetry new poetry-demo ``` Cette commande effectue 2 choses : - la création d’un répertoire pour le projet avec des fichiers nécessaires à la gestion des dépendances, - la création d’un environnement virtuel pour le projet. ```bash tree poetry-demo poetry-demo ├── pyproject.toml ├── README.rst ├── poetry_demo │ └── __init__.py └── tests ├── __init__.py └── test_poetry_demo.py ``` Si l’on veut ajouter une librairie, on va alors se servir de la CLI : ```bash poetry add django ``` Si l’on souhaite activer l’environnement virtuel du projet, on se place dedans et on appelle la commande shell. ```bash cd poetry-demo poetry shell ``` # Mot de la fin Ce tutoriel a été réalisé sur une machine Ubuntu 22.04, mais devrait fonctionner de la même façon sur d’autres distributions. Il existe, bien sur, d’autres façons de gérer ces environnements Python, ceci n’est qu’un exemple qui permet de travailler plus proprement avec Python. Il fonctionne dans un contexte d’administration système avec la gestion des CLI via pipx ou dans un contexte de développement logiciel via l’usage de poetry.