Website-Suche

So installieren Sie Python-Anwendungen in isolierten Umgebungen mit pipx


Wenn Sie mit Python vertraut sind, haben Sie sicherlich pip verwendet: das Python-Paketinstallationsprogramm. Mit pip können wir Pakete „global“ oder in virtuellen Umgebungen installieren. Virtuelle Umgebungen werden hauptsächlich dazu verwendet, Abhängigkeiten bestimmter Projekte zu installieren, also isoliert zu entwickeln. Normalerweise installieren wir Pakete „global“, wenn wir von überall auf die von ihnen bereitgestellten Dienstprogramme zugreifen möchten. Durch die Verwendung von pipx können wir das Beste aus beiden Ansätzen herausholen: Wir können jede Anwendung in ihrer eigenen virtuellen Umgebung installieren und gleichzeitig global darauf zugreifen.

In diesem Tutorial erfahren Sie, wie Sie pipx auf einigen der am häufigsten verwendeten Linux-Distributionen installieren und wie Sie damit Python-Anwendungen in isolierten Umgebungen installieren und ausführen.

In diesem Tutorial lernen Sie:

  • So installieren Sie pipx auf den gängigsten Linux-Distributionen
  • So verwenden Sie pipx zum Installieren und Ausführen von Python-Anwendungen in isolierten Umgebungen
  • So führen Sie Anwendungen vorübergehend aus
  • So aktualisieren, listen und entfernen Sie Pakete

Installation

Pipx wird aktiv auf Github entwickelt und ist in den offiziellen Repositories aller am häufigsten verwendeten Linux-Distributionen verpackt und verfügbar. Um pipx auf Fedora zu installieren, können wir Folgendes ausführen:

$ sudo dnf install pipx

Auf Debian und Debian-basierten Distributionen können wir die Installation stattdessen mit apt durchführen:

$ sudo apt install pipx

Unter Archlinux können wir das Paket mit pacman installieren:

$ sudo pacman -S python-pipx

Da pipx selbst ein Python-Paket ist, kann es auch mit pip installiert werden:

$ pip install pipx --user

Warum pipx?

Warum sollte man pipx verwenden? Welches Problem löst es? Durch die Verwendung von pipx erhalten wir die Möglichkeit, Pakete automatisch in ihren eigenen virtuellen Umgebungen zu installieren und gleichzeitig die von ihnen bereitgestellten Dienstprogramme von überall im System aus zu starten. Pipx wurde speziell für die Installation von Paketen entwickelt, die eine oder mehrere Befehlszeilen- oder grafische Dienstprogramme bereitstellen. Es ermöglicht uns sogar, Anwendungen „vorübergehend“ auszuführen und sie so lange auf dem System zu belassen, bis sie beendet werden.

Anwendungen mit pipx installieren

Wenn ein Paket keine ausführbare Datei enthält, lehnt pipx die Installation ab. Nehmen wir zum Beispiel an, wir möchten eine Webseite mithilfe der BeautifulSoup-Bibliothek crawlen. Wenn wir versuchen, das „bs4“-Paket zu installieren, antwortet pipx folgendermaßen:

$ 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.

Die Botschaft ist ziemlich klar, nicht wahr? Lass es uns erneut versuchen. Dieses Mal werden wir versuchen, das Paket „ansible-core“ zu installieren, das Ansible-Kerndienstprogramme wie ansible-playbook, ansible-console und ansible-vault enthält:

$ 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! ✨ 🌟 ✨

Wie erwartet hat dieses Mal alles korrekt funktioniert. Wie in der Meldung angegeben, sind die im Paket enthaltenen Dienstprogramme nun weltweit verfügbar. Wo hat pipx das Paket installiert? Pipx installiert Pakete zusammen mit ihren Abhängigkeiten in ihren eigenen virtuellen Umgebungen im Verzeichnis ~/.local/pipx/venvs. In unserem Fall können wir sehen, dass nur die Ansible-Core-Umgebung existiert:

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

Um die von einem Paket bereitgestellten Dienstprogramme global zugänglich zu machen, werden Links im Verzeichnis ~/.local/bin erstellt. Tatsächlich können wir sehen, dass nach der Installation des Pakets „ansible-core“ das Verzeichnis ~/.local/bin symbolische Links enthält, die auf ausführbare Dateien in der virtuellen Umgebung verweisen:

$ 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

Beachten Sie, dass kein --user-Flag bereitgestellt wurde, um anzugeben, dass wir Pakete für einen bestimmten Benutzer installieren möchten: Dies ist das Standardverhalten von pipx.

Eine Anwendung vorübergehend ausführen

Mit pipx haben wir die Möglichkeit, eine Anwendung vorübergehend auszuführen: Mit dem Unterbefehl run wird das entsprechende Paket in einer temporären virtuellen Umgebung installiert; Die Anwendung wird dann gestartet und automatisch entfernt, sobald sie beendet wird. Wenn das Dienstprogramm, das wir ausführen möchten, denselben Namen hat wie das Paket, das es bereitstellt, können wir einfach Folgendes ausführen:

$ pipx run <utility-name>

Wenn ein Paket mehrere ausführbare Dateien enthält, müssen wir stattdessen, wie im Fall des „ansible-core“-Pakets, das wir im vorherigen Beispiel installiert haben, die Option --spec verwenden, um den Paketnamen anzugeben. und geben Sie dann den Befehl an, den wir ausführen möchten. Angenommen, wir möchten „ansible“ und das Modul „gather_facts“ verwenden, um Informationen über localhost abzurufen. Wir würden Folgendes ausführen:

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

Auflistung der installierten Pakete

Um die über pipx installierten Pakete aufzulisten, können wir den Unterbefehl „list“ verwenden:

$ 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

Wie Sie sehen können, meldet die Ausgabe des Befehls, wo virtuelle Umgebungen installiert und Dienstprogramme verknüpft sind.

Pakete aktualisieren

Bei der Verwendung von pipx haben wir die Möglichkeit, ein einzelnes Paket oder alle Pakete gleichzeitig zu aktualisieren. In unserem Fall würden wir Folgendes ausführen, um nur das Paket „ansible-core“ zu aktualisieren:

$ pipx upgrade ansible-core

Um stattdessen alle installierten Pakete zu aktualisieren:

$ pipx upgrade-all

Pakete entfernen

Da jedes Paket in seiner eigenen virtuellen Umgebung installiert wird, kann es zusammen mit allen seinen Abhängigkeiten problemlos und sauber vom System entfernt werden. Der Befehl, mit dem wir diese Aufgabe erledigen können, lautet: „uninstall“. In unserem Fall würden wir zum Deinstallieren des „ansible-core“-Pakets von unserem System Folgendes ausführen:

$ pipx uninstall picard

Schlussfolgerungen

In diesem Tutorial haben wir gelernt, wie man Python-Anwendungen mit pipx in isolierten Umgebungen installiert und ausführt. Pipx ist darauf ausgelegt, nur Python-Pakete zu installieren, die eine oder mehrere ausführbare Dateien verfügbar machen. Pakete und ihre Abhängigkeiten werden in ihren eigenen virtuellen Umgebungen installiert; Links zu den von ihnen bereitgestellten Dienstprogrammen werden dann in einem Verzeichnis im Benutzer-PATH erstellt, sodass sie global ausgeführt werden können.

Verwandte Artikel: