[[Vorlage(Getestet, noble)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis()]] [[Bild(pipx_logo.webp, 48, align=left)]] [https://pipx.pypa.io pipx] {en} ist ein Hilfsprogramm zur Installation von [:Python:]-Modulen, die ausführbare Programme enthalten. pipx macht dabei nichts, was nicht auch auf anderem Wege möglich wäre, vereinfacht und automatisiert dabei aber die notwendigen Schritte auf einen einzigen Befehl. pipx installiert das Programm standardmäßig jeweils in einem [:venv:Virtual Environment] für den ausführenden Nutzer. Eine [https://raw.githubusercontent.com/pypa/pipx/main/pipx_demo.gif Demo] {en} führt in die Arbeit mit `pipx` ein. = Installation = == aus den Paketquellen = pipx ist in den Paketquellen enthalten, allerdings nicht unbedingt in der aktuellen, stabilen Version. Von daher wird die Installation über [:pip:] empfohlen. Wenn die Installation trotzdem über die Paketquellen erfolgen soll[1]: {{{#!vorlage Paketinstallation pipx, universe }}} Danach muss man noch sicherstellen, dass die Suchpfade des Systems pipx bzw. den Ordner '''~/.local/bin/''', in dem die ausführbaren Skripte als symbolische Links abgelegt werden, auch finden. Dazu führt man folgenden Befehl aus[2]: {{{#!vorlage Befehl python3 -m pipx ensurepath }}} und loggt sich anschließend aus und wieder ein. Jetzt ist pipx einsatzbereit. == via pip == Die aktuelle, stabile Version kann via [:pip:] installiert werden. Das ab Ubuntu 23.04 standardmäßig die Installation von Python-Module in einem [:venv:] forciert wird, pipx aber seinerseits pro installiertem Programm ein venv anlegt, ist dies in diesem Fall nicht sinnvoll. Deshalb muss man pip mit den entsprechenden Optionen aufrufen, um pipx für den ausführenden Benutzer ohne ein venv zu installieren: {{{#!vorlage Befehl pip3 install --user --break-system-packages pipx }}} Danach muss man noch sicherstellen, dass die Suchpfade des Systems pipx auch finden. Dazu führt man folgenden Befehl aus[2]: {{{#!vorlage Befehl python3 -m pipx ensurepath }}} und loggt sich anschließend aus und wieder ein. Jetzt ist pipx einsatzbereit. = Benutzung = Die allgemeine Syntax zum Aufruf von pipx lautet: {{{#!vorlage Befehl pipx BEFEHL PYTHONMODUL }}} pipx kennt dabei eine Reihe von [#Befehle Befehlen]. Beispiel: Mit z.B. {{{#!vorlage Befehl pipx install howdoi }}} würde das Programm [:howdoi:] installiert und wäre im Terminal direkt über `howdoi ...` ausführbar. Was dabei passiert bzw. von pipx erledigt wird: * Es wird ein neues Virtual Environment für das Modul im Homeverzeichnis des Nutzer angelegt, und zwar unterhalb von '''home/NUTZERNAME/.local/share/pipx/venvs'''. Das Virtual Environment trägt standardmäßig den Namen des Moduls, hier also '''howdoi'''. * Das Programm wird in das Virtual Environment installiert. * Es wird eine [:ln:Verknüpfung] in '''/home/NUTZERNAME/.local/bin''' auf die ausführbare Datei innerhalb des Virtual Environments angelegt. Im Beispiel hier also von '''/home/NUTZERNAME/.local/bin/howdoi''' auf '''home/NUTZERNAME/.local/share/pipx/venvs/howdoi/bin/howdoi''' howdoi ist dann im Terminal über die Eingabe von `howdoi` aufrufbar. Es ist keine Aktivierung des Virtual Environments notwendig. == Befehle == pipx jetzt kennt eine ganze Reihe von Befehlen. Einige davon sind: {{{#!vorlage Tabelle <-2 rowclass="titel" :>Befehl von pipx +++ Befehl <:>Erklärung +++ install PYTHONMODUL Legt ein neues Virtual Environment an und installiert darin `PYTHONMODUL`. Das in `PYTHONMODUL` enthaltene Programm ist danach direkt im Terminal aufrufbar. +++ uninstall PYTHONMODUL Entfernt das Modul `PYTHONMODUL` und löscht das zugehörige Virtual Environment. +++ inject VENV MODULNAME Installiert das Modul `PYTHONMODUL` in das vorhandene Virtual Environment `VENV`, d.h. es wird für `PYTHONMODUL` kein neues Virtual Environment angelegt. +++ uninject VENV PYTHONMODUL Entfertn das Modul `PYTHONMODUL` aus das vorhandene Virtual Environment `VENV`. +++ upgrade PYTHONMODUL Aktualisiert das installierte Modul `PYTHONMODUL`. +++ upgrade-all Aktualisiert alle installierten Module. +++ list Listet alle via pipx installierten Module auf. }}} Eine vollständige Übersicht über alle Befehle sowie Optionen findet man in der [https://pipx.pypa.io/docs/ Dokumentation] {en} oder im Terminal [2] über den Aufruf von `pipx -h`. == pipx run == pipx unterstützt auch das Testen von Modulen, ohne diese direkt zu installieren. Der Befehl {{{#!vorlage Befehl pipx run PYTHONMODUL [ARGUMENTE] }}} würde das Modul `PYTHONMODUL` in eine temporäres ''Virtual Environment'' installieren und das darin enthalten ausführbare Programm starten und, falls angegeben, die `ARGUMENTE` mit übergeben. Beispiel: {{{#!vorlage Befehl pipx run pycowsay Hallo Ubuntuusers! }}} Heißt das aufrufbare Programm nicht wie das Python-Modul selber, dann lautet des Aufruf: {{{#!vorlage Befehl pipx run --spec PYTHONMODUL_ABHÄNGIGKEITS_BEZEICHNUNG NAME_DES_PROGRAMMS [ARGUMENTE] }}} Ein Beispiel wäre das Modul [:httpie:]: das darin enthalten ausführbare Programm heißt nur `http`: {{{#!vorlage Befehl pipx run --spec httpie http www.httpbin.org }}} Die mit `pipx run` angelegten, temporären venvs werden standardmäßig 14 Tage behalten, d.h. wenn man `pipx run` mehrmals für ein Python-Modul aufruft, erfolgt der Download nur ein Mal, sofern man noch innerhalb der 14 Tage seit dem ersten Aufruf ist. Der Speicherpfad für die temporären venvs von pipx ist '''/home/NUTZERNAME/.cache/pipx'''. = Deinstallation = Hat man pipx via pip installiert, lautet der Befehl zu Deinstallation {{{#!vorlage Befehl pip3 uninstall --break-system-packages pipx }}} Egal, ob Installation via pip oder aus den Paketquellen sollte man nach der Deinstallation von pipx eventuell noch vorhandene venvs manuell löschen, d.h. '''home/NUTZERNAME/.local/share/pipx/venvs''' inkl. Unterverzeichnissen und '''/home/NUTZERNAME/.cache/pipx''' inkl. Unterverzeichnissen. = Links = * [https://pipx.pypa.io Projektseite] {en} * [https://pipx.pypa.io/docs/ Dokumentation] {en} von pipx * [https://pipx.pypa.io/how-pipx-works/ detaillierte Erklärung] {en}, wie `pipx` funktioniert #tag: Paketverwaltung, Python