PipX statt Pip

  Ralf Hersel   Lesezeit: 3 Minuten  🗪 4 Kommentare

Pipx räumt die aktuellen Beschränkungen von Pip aus dem Weg, indem es die einfache Installation von Python-Paketen in virtuellen Umgebungen vereinfacht.

pipx statt pip

Pip ist ein beliebtes Werkzeug für die Installation von Python-Paketen und -Modulen aus dem Python Package Index. In neueren Versionen bestimmter Distribution (Ubuntu 23.04, Fedora 38 und wahrscheinlich weitere) stossen Pip-Benutzer:innen jedoch auf den "Externally Managed Environment"-Fehler. Grund für diese Fehlermeldung ist eine Änderung bei der Verwendung von Python-Paketen. Die Änderung wurde vorgenommen, um den Konflikt zwischen Betriebssystem-Paketmanagern und Python-spezifischen Paketverwaltungswerkzeugen wie pip zu vermeiden. Zu diesen Konflikten gehören sowohl API-Inkompatibilitäten auf Python-Ebene als auch Konflikte über den Besitz von Dateien.

An dieser Stelle kommt pipx ins Spiel. Es erstellt eine neue virtuelle Umgebung für jede neu installierte Anwendung. Ausserdem erstellt es Links zu lokalen Binärdateien in /bin auf globaler Ebene. All dies geschieht automatisch.

Pipx kann auf dem üblichen Weg mit dem Distributions-eigenen Paketmanager (apt, pacman, usw.) installiert werden. Danach ruft man pipx ensurepath auf, um das Werkzeug von überall aufrufen zu können. Die Befehle sind selbsterklärend und können mit pipx help angezeigt werden. Hier nun ein Beispiel für die Installation der Anwendung cowsay:

pipx install cowsay==4.0
installed package cowsay 4.0, installed using Python 3.10.10
These apps are now globally available

Die Anwendung wurde in der (alten) Version 4.0 in einer virtuellen Umgebung installiert. Lässt man ==4.0 weg, so würde die aktuelle Version installiert. Mit pipx list kann man die installierten Anwendungen anzeigen lassen:

pipx list
venvs are in /home/ralf/.local/pipx/venvs
apps are exposed on your $PATH at /home/ralf/.local/bin
package cowsay 4.0, installed using Python 3.10.10

Um cowsay zu aktualisieren, verwendet man den Befehl pipx upgrade cowsay, bzw. pipx update-all, wodurch alle Pip-Pakete aktualisiert werden:

pipx upgrade cowsay
upgraded package cowsay from 4.0 to 5.0 (location: /home/ralf/.local/pipx/venvs/cowsay)

Die Einschränkungen, die pip auferlegt wurden, haben seine Verwendung durch die Endnutzer eingeschränkt. Zum Glück bietet pipx die dringend benötigte Alternative. Es erfüllt die Python-Richtlinien zur Verwendung virtueller Umgebungen und ermöglicht gleichzeitig, dass installierte Anwendungen auf globaler Ebene verfügbar sind.

Für Endbenutzer, die keine Python-Anwendungsentwickler sind, ermöglicht dies, Python-Anwendungen zu verwenden, die in den Distributions-Repositories nicht verfügbar sind. Weitergehende Erklärungen und Anwendungsbeispiele finden sich auf der Projektseite von pipx:

Quelle: https://pypa.github.io/pipx/

Tags

Python, Pip, Pipx, Virtuelle Umgebung, virtenv

Ralf Hersel
Geschrieben von Ralf Hersel am 31. Mai 2023 um 18:26

Weil unsere Kommentarfunktion für ein paar Tage ausgeschaltet war, poste ich für Michael seine Anfrage:

Meine konkrete Frage zu PipX: Wie sollte ich vorgehen, wenn ich schon eine Menge pip-installierter Pakete habe?

Ralf Hersel
Geschrieben von Ralf Hersel am 31. Mai 2023 um 18:35

Ich kann Deine Frage nicht gut beantworten, sondern nur ein paar Hinweise geben. Mit dem Befehle 'pip list' siehst Du alle pip-Pakete, die bei Dir installiert sind. Diese müssen nicht zwingend mit pip installiert worden sein, sondern können auch über die normale Paketverwaltung (apt, pacman, usw.) gekommen sein.

Grundsätzlich ist die Installation von Paketen über die normale Paketverwaltung der richtige Weg. Je mehr unterschiedliche Paketverwaltungen ihre Finger im Spiel haben, desto konfliktträchtiger wird es.

Ich rate davon ab, pip-Pakete zugunsten von pipx zu ersetzen. Stattdessen würde ich für neue Installationen zuerst schauen, ob sie über die normale Paketverwaltung verfügbar sind. Ist das nicht der Fall, würde ich ab jetzt mit pipx installieren.

Da ich damit auch noch keine Erfahrungen gesammelt habe, sind meine Ratschläge mit Vorsicht zu geniessen. Vielleicht gibt es weitere Kommentare, die mehr Licht ins Dunkle bringen.

MaSchle
Geschrieben von MaSchle am 1. Juni 2023 um 19:27

also ich habe pipx ausprobiert und danach doch eine env Umgebung eingerichtet mit pip als installer.. Pipx hat meiner bescheidenen Meinung Probleme mit der Verlinkung. Das System ist debian 12. Bisher(debian11) hatte ich Jupyterlab als userinstallation laufen. Das ist bei Debian12 so nicht erwuenscht. es gib ein Hinweis beim Versuch dies zu tun. Nicht so schlimm jetzt laeuft Jupyterlab in einer Umgebung ohne Probleme

Michael
Geschrieben von Michael am 2. Juni 2023 um 08:40

Danke @Ralf und @MaSchle, ich habe noch ein wenig dazu recherchiert und denke inzwischen auch, dass ein VirtualEnvironment der beste Weg wäre. Allerdings habe ich ca. 200 pip-Pakete; von denen weiß ich nicht

  • welche über die Paketverwaltung (MANJARO) oder

  • anders, z.B. von mir per $ pip install

installiert wurden und wie ich das aufräume. Vielleicht finde ich hier Hilfe zum Verstehen und Einrichten der "Umgebung".