[[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 [:Python_Setuptools:]. Mehr Details zu den Unterschieden zwischen pip und easy_install findet man im [https://packaging.python.org/pip_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. = 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 [:Python 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