Recherche de site Web

Comment installer des applications Python dans des environnements isolés avec pipx


Si vous connaissez Python, vous avez sûrement utilisé pip : l'installateur du package Python. Avec pip, nous pouvons installer des packages « globalement » ou dans des environnements virtuels. Les environnements virtuels sont principalement utilisés pour installer des dépendances de projets spécifiques, donc pour les développer de manière isolée. Nous installons généralement les packages, « globalement », lorsque nous souhaitons accéder aux utilitaires qu'ils fournissent de n'importe où. En utilisant pipx, nous pouvons obtenir le meilleur des deux approches : nous pouvons installer chaque application dans son propre environnement virtuel et, en même temps, y accéder globalement.

Dans ce didacticiel, nous voyons comment installer pipx sur certaines des distributions Linux les plus utilisées et comment l'utiliser pour installer et exécuter des applications Python dans des environnements isolés.

Dans ce didacticiel, vous apprendrez :

  • Comment installer pipx sur les distributions Linux les plus courantes
  • Comment utiliser pipx pour installer et exécuter des applications Python dans des environnements isolés
  • Comment exécuter des applications temporairement
  • Comment mettre à niveau, répertorier et supprimer des packages

Installation

Pipx est activement développé sur Github, et est packagé et disponible dans les référentiels officiels de toutes les distributions Linux les plus utilisées. Pour installer pipx sur Fedora, nous pouvons exécuter :

$ sudo dnf install pipx

Sur Debian et les distributions basées sur Debian, nous pouvons effectuer l'installation en utilisant apt :

$ sudo apt install pipx

Sur Archlinux, nous pouvons installer le package en utilisant pacman :

$ sudo pacman -S python-pipx

Pipx étant lui-même un package Python, il peut également être installé avec pip :

$ pip install pipx --user

Pourquoi pipx ?

Pourquoi devrait-on utiliser pipx ? Quel problème cela résout-il ? En utilisant pipx, nous avons la possibilité d'installer automatiquement les packages dans leurs propres environnements virtuels et en même temps de lancer les utilitaires qu'ils fournissent depuis n'importe où dans le système. Pipx est spécifiquement conçu pour installer des packages qui exposent un ou plusieurs utilitaires de ligne de commande ou graphiques ; cela nous permet même d'exécuter des applications « temporairement », en les gardant sur le système jusqu'à leur sortie.

Installer des applications avec pipx

Si un package ne contient aucun exécutable, pipx refusera de l'installer. Supposons, par exemple, que nous souhaitions gratter une page Web à l'aide de la bibliothèque BeautifulSoup. Si nous essayons d'installer le package « bs4 », pipx répond de cette façon :

$ pipx install bs4

No apps associated with package bs4 or its dependencies. If you are attempting  to 
install a library, pipx should not be used. Consider using pip or a similar tool instead.

Le message est assez clair, n’est-ce pas ? Essayons encore. Cette fois, nous allons essayer d'installer le package « ansible-core », qui contient les utilitaires de base d'Ansible tels que ansible-playbook, ansible-console et ansible-vault :

$ pipx install ansible-core
  installed package ansible-core 2.15.2, installed using Python 3.11.4
  These apps are now globally available
    - ansible
    - ansible-config
    - ansible-connection
    - ansible-console
    - ansible-doc
    - ansible-galaxy
    - ansible-inventory
    - ansible-playbook
    - ansible-pull
    - ansible-test
    - ansible-vault
done! ✨ 🌟 ✨

Comme prévu, cette fois, tout a fonctionné correctement. Comme indiqué dans le message, les utilitaires contenus dans le package sont désormais disponibles dans le monde entier. Où pipx a-t-il installé le package ? Pipx installe les packages, ainsi que leurs dépendances, dans leurs propres environnements virtuels, sous le répertoire ~/.local/pipx/venvs. Dans notre cas, nous pouvons voir que seul l'environnement ansible-core existe :

$ ls -l ~/.local/pipx/venvs
total 4 
drwxr-xr-x. 5 doc doc 4096 Jul 31 16:10 ansible-core

Pour rendre les utilitaires exposés par un package accessibles globalement, des liens sont créés dans le répertoire ~/.local/bin. En effet, on peut voir comment, après installation du package « ansible-core », le répertoire ~/.local/bin contient des liens symboliques pointant vers des exécutables dans l'environnement virtuel :

$ ls ~/.local/bin -l 
total 16 
lrwxrwxrwx. 1 doc doc 52 Jul 31 16:10 ansible -> /home/doc/.local/pipx/venvs/ansible-core/bin/ansible 
lrwxrwxrwx. 1 doc doc 59 Jul 31 16:10 ansible-config -> /home/doc/.local/pipx/venvs/ansible-core/bin/ansible-config 
lrwxrwxrwx. 1 doc doc 63 Jul 31 16:10 ansible-connection -> /home/doc/.local/pipx/venvs/ansible-core/bin/ansible-connection 
lrwxrwxrwx. 1 doc doc 60 Jul 31 16:10 ansible-console -> /home/doc/.local/pipx/venvs/ansible-core/bin/ansible-console 
lrwxrwxrwx. 1 doc doc 56 Jul 31 16:10 ansible-doc -> /home/doc/.local/pipx/venvs/ansible-core/bin/ansible-doc 
lrwxrwxrwx. 1 doc doc 59 Jul 31 16:10 ansible-galaxy -> /home/doc/.local/pipx/venvs/ansible-core/bin/ansible-galaxy 
lrwxrwxrwx. 1 doc doc 62 Jul 31 16:10 ansible-inventory -> /home/doc/.local/pipx/venvs/ansible-core/bin/ansible-inventory 
lrwxrwxrwx. 1 doc doc 61 Jul 31 16:10 ansible-playbook -> /home/doc/.local/pipx/venvs/ansible-core/bin/ansible-playbook 
lrwxrwxrwx. 1 doc doc 57 Jul 31 16:10 ansible-pull -> /home/doc/.local/pipx/venvs/ansible-core/bin/ansible-pull 
lrwxrwxrwx. 1 doc doc 57 Jul 31 16:10 ansible-test -> /home/doc/.local/pipx/venvs/ansible-core/bin/ansible-test 
lrwxrwxrwx. 1 doc doc 58 Jul 31 16:10 ansible-vault -> /home/doc/.local/pipx/venvs/ansible-core/bin/ansible-vault

Observez comment nous n'avons pas fourni d'indicateur --user pour spécifier que nous souhaitons installer des packages pour un utilisateur spécifique : c'est le comportement par défaut de pipx.

Exécuter une application temporairement

Avec pipx nous avons la possibilité d'exécuter une application temporairement : en utilisant la sous-commande run, le package correspondant est installé dans un environnement virtuel temporaire ; l'application est alors lancée, et automatiquement supprimée dès sa fermeture. Lorsque l'utilitaire que nous voulons exécuter porte le même nom que le package qui le fournit, nous pouvons simplement exécuter :

$ pipx run <utility-name>

Lorsqu'un package contient plusieurs exécutables, comme dans le cas du package « ansible-core » que nous avons installé dans l'exemple précédent, nous devons utiliser l'option --spec pour spécifier le nom du package, et ensuite spécifier la commande que nous voulons exécuter. Supposons que nous souhaitions utiliser « ansible » et le module « gather_facts » pour récupérer des informations sur localhost. Nous courrions :

$ pipx run --spec ansible-core ansible -m gather_facts localhost

Liste des packages installés

Afin de lister les packages installés via pipx, nous pouvons utiliser la sous-commande « list » :

$ pipx list
venvs are in /home/doc/.local/pipx/venvs 
apps are exposed on your $PATH at /home/doc/.local/bin 
  package ansible-core 2.15.2, installed using Python 3.11.4 
   - ansible 
   - ansible-config 
   - ansible-connection 
   - ansible-console 
   - ansible-doc 
   - ansible-galaxy 
   - ansible-inventory 
   - ansible-playbook 
   - ansible-pull 
   - ansible-test 
   - ansible-vault

Comme vous pouvez le voir, le résultat de la commande indique où les environnements virtuels sont installés et où les utilitaires sont liés.

Forfaits de mise à niveau

Lorsque vous utilisez pipx, nous avons la possibilité de mettre à niveau un seul package ou tous les packages à la fois. Dans notre cas, pour mettre à jour uniquement le package « ansible-core », nous exécuterions :

$ pipx upgrade ansible-core

Pour mettre à niveau tous les packages installés :

$ pipx upgrade-all

Supprimer des paquets

Étant donné que chaque package est installé dans son propre environnement virtuel, il peut être facilement supprimé du système de manière propre, ainsi que toutes ses dépendances. La commande qui nous permet d'accomplir cette tâche est : « désinstaller ». Dans notre cas, pour désinstaller le package « ansible-core » de notre système, nous exécuterions :

$ pipx uninstall picard

Conclusions

Dans ce didacticiel, nous avons appris comment installer et exécuter des applications Python dans des environnements isolés à l'aide de pipx. Pipx est conçu pour installer uniquement les packages Python qui exposent un ou plusieurs exécutables. Les packages et leurs dépendances sont installés dans leurs propres environnements virtuels ; les liens vers les utilitaires qu'ils fournissent sont ensuite créés dans un répertoire du PATH utilisateur, afin qu'ils puissent être exécutés globalement.

Articles connexes: