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æ19æ„T17:05:36+02:00 License: CC By-SA Tags: python3 et ubuntu Score: 22 # 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.