[[Vorlage(Getestet, bionic, focal, jammy)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:mit Root-Rechten arbeiten:] [:Editor:einen Editor öffnen] }}} [[Inhaltsverzeichnis()]] [[Bild(Wiki/Icons/python.png, 48, align=left)]] '''pip''' ist ein rekursives Akronym für '''P'''ip '''I'''nstalls '''P'''ython und ist das Standardverwaltungswerkzeug für [:Python:]-Module. Es ist expliziter Ersatz und indirekter Nachfolger für das ältere `easy_install` aus den [:Archiv/Python_Setuptools:Setuptools]. Mehr Details zu den Unterschieden zwischen pip und easy_install findet man im [https://packaging.python.org/en/latest/discussions/pip-vs-easy-install/ Python Packaging Guide] {en}. Im direkten Vergleich orientiert sich die Syntax von pip an der von anderen Paketverwaltern, wie z.B. [:APT:]. Des weiteren werden auch bei pip Abhängigkeiten von anderen Modulen direkt aufgelöst, d.h. zusätzlich benötigte Module werden direkt mit installiert. pip installiert Python-Module, welche im [https://pypi.org/ Python Package Index] {en} aufgeführt sind. Außerdem besteht die Möglichkeit, Module direkt aus den Versionskontrollsystemen wie [:Git:], Mercurial oder Subversion zu laden und dann zu installieren. Ebenfalls ist es möglich, Module zu installieren, welche zuvor auf den Rechner herunter geladen wurden. = Installation = pip kann als Python-Modul direkt aus den Paketquellen installiert werden[1]: {{{#!vorlage Paketinstallation python3-pip, universe }}} == Manuelle Installation == Wer eine neuere Version von pip als die aus den Paketquellen benötigt der deinstalliert zunächst das etwaige Ubuntu-Paket[1] und ruft dann den Link `https://bootstrap.pypa.io/get-pip.py` im Browser oder mittels [:wget:] auf, um das Installationsprogramm herunterzuladen. Sollte der Browser die Datei nicht zum Download anbieten, sondern „nur“ im Browserfenster den Quelltext anzeigen, so öffnet man einfach einen Texteditor, kopiert den kompletten Quelltext aus dem Browserfenster und fügt ihn im Editor ein. Danach speichert man die Datei unter dem Namen '''get-pip.py''' in einem beliebigen Verzeichnis, z.B. im [:Homeverzeichnis:]. Danach wechselt man in dieses Verzeichnis und ruft zur Installation der Python 3 Version den folgenden Befehl auf[2][3]: {{{#!vorlage Befehl sudo python3 get-pip.py }}} Jetzt installiert sich pip ins Verzeichnis '''/usr/local/bin''' und ist dann einsatzbereit. = Nutzung = [[Vorlage(Fremd, Software, "Module aus dem Python Package Index werden an der Paketverwaltung „vorbei“ installiert. Dies birgt zwar an sich gesehen auch bei globaler Installation keine Konflikte, kann aber zu unvorhergesehen Ergebnissen oder Problemen mit Python-Skripten führen, wenn das gleiche Python Modul auch über die Paketverwaltung installiert wird, zumal mittels `pip` installierte Module denen aus der Paketverwaltung vorgezogen werden.")]] == Wohin werden mit pip installierte Python-Module installiert? == Das Verzeichnis, in das pip das Python-Modul (bzw. dessen Dateien) installiert, hängt davon ab, wie bzw. mit welchen Optionen man pip aufruft. Wird pip mit Root-Rechten ausgeführt, befinden sich die installierten Module im Verzeichnis '''/usr/local/lib/pythonX.Y/dist-packages/''' bzw. einem Unterverzeichnis davon, wobei `X.Y` die Python-Version ist, für die installiert wurde. Sind im Python-Modul ausführbare Programme enthalten, werden diese nach '''/usr/local/bin''' abgelegt. Wird pip mit Nutzerrechten (also ohne Root-Rechte) aufgerufen, befinden sich die installierten Module im Verzeichnis '''~/.local/lib/pythonX.Y/site-packages''' bzw. einem Unterverzeichnis davon, wobei `X.Y` die Python-Version ist, für die installiert wurde. Sind im Python-Modul ausführbare Programm enthalten, werden diese im [:Homeverzeichnis:] des Nutzers unter '''~/.local/bin''' abgelegt. {{{#!vorlage Hinweis '''~/.local/bin''' ist wegen eines [bug:1588562:Bugs] eventuell nicht im Suchpfad für ausführbare Programme enthalten, man muss das Verzeichnis in diesem Fall manuell der [:Umgebungsvariable:] PATH hinzufügen, indem man es in die Datei '''~/.profile''' einträgt. Danach sollte man sich als Nutzer einmal ab- und dann wieder neu anmelden, damit die Änderung greift. Siehe dafür auch [:Umgebungsvariable/Dateien/#Environment-einzelner-oder-aller-Benutzer:] sowie [:Umgebungsvariable/typische_Anwendungsfälle/#PATH-erweitern:]. }}} Bei Verwendung von pip in Kombination mit [:venv:] befinden sich die Module innerhalb des Modulverzeichnisses des „Virtual Environments“. == Wohin sollte man installieren? == Es gibt selten Gründe, ein Python-Modul systemweit für alle Nutzer zu installieren. Module, die vom System benötigt werden, werden normalerweise systemweit über die Paketverwaltung installiert. Von daher ist die lokale Installation für die Nutzer oder die Installation in ein lokales „Virtual Environment“ der zu bevorzugende Weg. Die lokale Installation bzw. ein lokales „Virtual Environment“ hat weiterhin den Vorteil, dass man keine Konflikte bzw. Probleme mit Modulen bekommt, die systemweit über die Paketverwaltung installiert wurden. {{{#!vorlage Hinweis Für die selbe Python-Version lassen sich standardmäßig Module nicht parallel lokal für einen Nutzer und systemweit installieren, es ist nur eine von beiden Installationen möglich. Wer verschiedene Versionen des gleichen Moduls braucht muss dann auf ein "Virtual Environment" zurück greifen. }}} == pip ausführen == pip ist ein Kommandozeilenprogramm. Die allgemeine Syntax für die Python 3 Version lautet[2]: {{{#!vorlage Befehl pip3 BEFEHL [OPTION(EN)] MODUL(E) }}} Das für Python 3.4 und neuer verfügbare Modul von pip lässt sich wie folgt nutzen: {{{#!vorlage Befehl python3 -m pip [OPTION(EN)] BEFEHL MODUL(E) }}} Zu beachten ist auch, dass pip – im Gegensatz zum allgemeinen Verhalten von Linux und Python – nicht "case-sensitve" arbeitet, d.h. Groß- / Kleinschreibung wird nicht unterschieden. Der Befehl `pip3 install modulname` installiert das Modul genau so wie `pip3 install ModulName`. Einige Befehle sind: {{{#!vorlage Tabelle <-2 rowclass="titel">Befehle von pip +++ Befehl Erklärung +++ `install MODUL` Installiert das Modul MODUL. Es können auch mehrere Module angegeben werden, die dann alle installiert werden. +++ `uninstall MODUL` Deinstalliert das Modul MODUL. Es können auch mehrere Module angegeben werden, die dann alle deinstalliert werden. +++ `list` Zeigt die installierten Python-Module an. +++ `show MODUL` Zeigt Informationen zum installierten Modul `MODUL` an. }}} Einige Optionen von pip in Kombination mit dem Befehl `install` sind: {{{#!vorlage Tabelle <-2 rowclass="titel">Optionen von pip in Kombination mit dem Befehl `install` +++ Option Erklärung +++ `-U`, `--upgrade` Aktualisiert das bzw. die nachfolgend angegebene(n) Modul(e) auf die neuste Version. +++ `-r requirments.txt` Installiert alle Module, die in der Datei '''requirments.txt''' aufgeführt sind. Pro Zeile muss in der Datei ein Modulname stehen. +++ `--user` Installiert das bzw. die nachfolgend angegebene(n) Modul(e) lokal für den aktuellen Benutzer. Diese Option wird von pip implizit angenommen, wenn man das Programm ohne Root-Rechte aufruft. }}} Eine Übersicht über die jeweiligen Optionen erhält man über den Aufruf {{{#!vorlage Befehl pip3 BEFEHL -h }}} also z.B.: {{{#!vorlage Befehl pip3 install -h }}} Eine komplette Übersicht findet man in den [:man:Man-Pages] von pip. == Beispiele == Der folgende Befehl installiert das Modul "Markdown" lokal für den aktuellen Benutzer: {{{#!vorlage Befehl pip3 install markdown }}} {{{ Collecting markdown Downloading Markdown-2.6.11-py2.py3-none-any.whl (78kB) 100% |████████████████████████████████| 81kB 1.2MB/s Installing collected packages: markdown Successfully installed markdown-2.6.11 }}} Die Deinstallation sieht so aus: {{{#!vorlage Befehl pip3 uninstall markdown }}} {{{ Uninstalling Markdown-2.6.11: /home/NUTZER/.local/bin/markdown_py /home/NUTZER/.local/lib/python3.5/site-packages/Markdown-2.6.11.dist-info/DESCRIPTION.rst ... /home/NUTZER/.local/lib/python3.5/site-packages/markdown/extensions/abbr.py ... /home/NUTZER/.local/lib/python3.5/site-packages/markdown/treeprocessors.py /home/NUTZER/.local/lib/python3.5/site-packages/markdown/util.py Proceed (y/n)? y Successfully uninstalled Markdown-2.6.11 }}} Mit dem folgenden Befehl wird ein für den aktuellen Benutzer installiertes Modul aktualisiert, hier im Beispiel "Markdown": {{{#!vorlage Befehl pip3 install -U markdown }}} pip prüft dabei direkt, ob die Abhängigkeiten des Moduls ebenfalls aktuell sind. Sonst werden diese auch auf den neusten Stand gebracht. Ist das Modul systemweit installiert, dann muss die Option `--user` weg gelassen werden. Falls man neben dem Aktualisieren von "Markdown" gleich noch ein weiteres Modul mit installieren mögen würde, so sähe dies am Beispiel "streamlink" dann folgendermaßen aus: {{{#!vorlage Befehl pip3 install -U markdown streamlink }}} Man kann mit pip auch ein Modul gezielt in einer bestimmten Version installieren. Der folgende Befehl würde [:Django:] in der Version 1.11.18 installieren: {{{#!vorlage Befehl pip install django==1.11.18 }}} Würde man anschließend `pip install -U django` aufrufen, dann würde immer auf die aktuellste Version aktualisiert (also z.B. 4.0.3) und nicht "nur" auf die nächste Minor-Version (also z.B. 1.11.19). Der folgende Befehl zeigt alle installierten Python-Module – auch die, die über die [:Paketverwaltung:] von Ubuntu systemweit installiert wurden: {{{#!vorlage Befehl pip3 list }}} {{{ -lxc (0.1) apt-xapian-index (0.47) apturl (0.5.2) beautifulsoup4 (4.4.1) ... unity-scope-yelp (0.1) unity-scope-zotero (0.1) urllib3 (1.22) usb-creator (0.3.0) virtualenv (15.0.1) wheel (0.29.0) xdiagnose (3.8.4.1) xkit (0.0.0) XlsxWriter (0.7.3) }}} Möchte man nur die für den aktuellen Benutzer lokal installierten Module anzeigen, dann lautet der Befehl {{{#!vorlage Befehl pip3 list --user }}} Wie bereits in der Einleitung erwähnt, kann pip auch Module direkt aus einem Versionskontrollsystem herunterladen. Im folgenden Beispiel wird die aktuelle Version von [github:pallets/jinja:Jinja2:] direkt aus dem Git-Repositry lokal installiert: {{{#!vorlage Befehl pip3 install https://github.com/pallets/jinja/archive/master.zip }}} Details dazu findet man in der [https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support offiziellen Dokumentation] {en}. Wer mehrere Module auf ein Mal installieren möchte, der kann entweder bei `install` alle angegeben, zwischen den Modulnamen muss lediglich ein Leerzeichen stehen. Oder man kann eine einfache Text-Datei anlegen, in den die Modulnamen aufgeführt sind. Sieht die Datei Namens '''requirements.txt''' z.B. so aus: {{{ markdown jinja2 howdoi }}} dann würde der Befehl {{{#!vorlage Befehl pip3 install -r requirements.txt }}} die Module Markdown, jinja2 und howdoi lokal installieren. Dies würde auch für die Deinstallation mit dem Befehl `uninstall` funktionieren. == Ab Ubuntu 23.04 == Ab [:23.04:Version 23.04 Lunar Lobster] implementiert Ubuntu das [https://peps.python.org/pep-0668 ''Python Enhancement Proposal'' (PEP) 668] {en}, was eine grundlegende Veränderung in der Funktionsweise von `pip` betreffend systemweite '''und''' lokale Installationen mit sich zieht. Folgende Fehlermeldung tritt bei dem Versuch auf, ein Python-Paket via `pip` zu installieren: {{{#!vorlage Befehl pip3 install django }}} {{{ error: externally-managed-environment × This environment is externally managed ╰─> To install Python packages system-wide, try apt install python3-xyz, where xyz is the package you are trying to install. If you wish to install a non-Debian-packaged Python package, create a virtual environment using python3 -m venv path/to/venv. Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make sure you have python3-full installed. If you wish to install a non-Debian packaged Python application, it may be easiest to use pipx install xyz, which will manage a virtual environment for you. Make sure you have pipx installed. See /usr/share/doc/python3.11/README.venv for more information. note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages. hint: See PEP 668 for the detailed specification. }}} Demnach wird nämlich der Spezifikation des PEP folgend markiert, das die Pakete der Distribution ''extern'', das heißt nicht durch Python, verwaltet werden. Das bedeutet, das `pip` die in den [https://docs.python.org/3/library/sys.html#sys.path `sys.path`] {en} (Installations-Pfad für Pakete) installierten Python-Pakete nicht verändern, also installieren, deinstallieren, aktualisieren..., darf, sofern dieses Verhalten nicht manuell außer Kraft gesetzt wird. Stattdessen übernimmt der Ubuntu-Paketmanager [:APT:] standardmäßig die Paketverwaltung. Dieses Verhalten wurde implementiert, um durch den Python-Paketmanager hervorgerufene Konflikte mit den durch den Distributions-Paketmanager installierten Paketen abzuwenden. Folgende Möglichkeiten existieren, um `pip` ab Ubuntu 23.04 zu nutzen (am Beispiel der Python-Paketierungs-Bibliothek [:Archiv/Python Setuptools:Setuptools]): === Installation von Python-Paketen aus den Ubuntu-Paketquellen === Python-Pakete lassen sich aus den Apt-Paketquellen unter dem generischen Paketnamen-Schema `python3-paketname` beziehen: {{{#!vorlage Paketinstallation python3-setuptools, universe }}} Dies hat allerdings den Nachteil, dass aus dem [https://pypi.org ''Python Package Index'' (PyPI)], aus dem `pip` installiert, um den Faktor Zehn mehr Pakete bezogen werde können, als für Ubuntu paktiert wurden. === Installation durch `pip` erzwingen === Dies kann durch die Verwendung der Kommandozeilen-Option `--break-system-packages` erreicht werden. `pip` installiert dann in die [#Wohin-werden-mit-pip-installierte-Python-Module-installiert? gewohnten Pfade]: : {{{#!vorlage Befehl pip3 install --break-system-packages setuptools }}} === `pipx` bzw. virtuelle Umgebungen nutzen === Eine weitere Möglichkeit stellt dar, isolierte Umgebungen für die Paketinstallation ([:venv:''Virtual Environments'']) zu nutzen, bspw.: {{{#!vorlage Befehl python3 -m venv .venv/ .venv/bin/pip3 install setuptools }}} Das Kommandozeilen-Programm [https://pipx.pypa.io `pipx`] {en} stellt als (nicht die vollständige Funktionalität bietendes) [wikipedia:Wrapper_(Software):Wrapper-Programm] für `pip` eine komfortable Lösung dar, Python-Applikationen zu installieren und auszuführen; dafür verwaltet das Programm virtuelle Umgebungen für die installierten Programme. Installiert werden kann das Programm direkt aus den Paketquellen: {{{#!vorlage Paketinstallation pipx, universe }}} Keine Alternative ist es jedoch, wenn man Python-Bibliotheken installieren möchte oder eigene Programme mit zahlreichen Abhängigkeiten entwickelt. {{{#!vorlage Befehl pipx install setuptools }}} {{{ No apps associated with package setuptools or its dependencies. If you are attempting to install a library, pipx should not be used. Consider using pip or a similar tool instead. }}} Beispiel für ein Programm mit Kommandozeilen-Interface: {{{#!vorlage Befehl pipx install poetry poetry }}} === Markierung als ''extern verwaltet'' löschen === Eine (unsaubere und nicht empfohlene) Lösung ist außerdem, die [https://peps.python.org/pep-0668/#marking-an-interpreter-as-using-an-external-package-manager Markierungsdatei] {en}, die Python mitteilt, dass die Pakete extern verwaltet werden, zu löschen: {{{#!vorlage Befehl sudo rm /usr/lib/pythonX.Y/EXTERNALLY-MANAGED }}} = Tipps & Tricks = == Alle Python-Pakete mit pip auf einmal aktualisieren == Möchte man mittels pip alle lokalen Python-Pakete aktualisieren, so kann man sich mit folgender Befehlskette – welche neben pip noch aus [:grep:], [:cut:] und [:xargs:] besteht – behelfen: {{{#!vorlage Befehl pip3 freeze --user | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip3 install -U }}} = Manuelle Deinstallation = Hat man die Paketverwaltung '''pip''' [#Manuelle-Installation manuell] mit dem Script '''get-pip.py''' installiert, kann man diese mit folgendem Befehl wieder deinstallieren. {{{#!vorlage Befehl sudo python3 -m pip uninstall pip }}} Da bei der Installation automatisch auch (wenn noch nicht vorhanden) die [:Archiv/Python Setuptools:Setuptools] installiert werden, kann man den Befehl noch mit `setuptools` erweitern, falls man die setuptools nicht benötigt: {{{#!vorlage Befehl sudo python3 -m pip uninstall pip setuptools }}} = Links = * [https://seeseekey.net/archive/115806 Alle Python-Pakete mit pip aktualisieren] {de} * [stackoverflow:2720014/upgrading-all-packages-with-pip: Upgrading all packages with pip] {en} – Zugehöriger Artikel * [https://pip.pypa.io/en/stable/ offizielle Dokumentation] {en} zu pip * [:Python:] {Übersicht} Übersichtsartikel #tag: Paketverwaltung, Python