ubuntuusers.de

pip

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Wiki/Icons/python.png pip ist ein rekursives Akronym für Pip Installs Python und ist das Standardverwaltungswerkzeug für Python-Module. Es ist expliziter Ersatz und indirekter Nachfolger für das ältere easy_install aus den Setuptools. Mehr Details zu den Unterschieden zwischen pip und easy_install findet man im Python Packaging Guide 🇬🇧.

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 Python Package Index 🇬🇧 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]:

  • python3-pip (universe)

Befehl zum Installieren der Pakete:

sudo apt-get install python3-pip 

Oder mit apturl installieren, Link: apt://python3-pip

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]:

sudo python3 get-pip.py 

Jetzt installiert sich pip ins Verzeichnis /usr/local/bin und ist dann einsatzbereit.

Nutzung

Hinweis!

Fremdsoftware kann das System gefährden.


Anmerkung: 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.

Hinweis:

~/.local/bin ist wegen eines 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 (Abschnitt „Environment-einzelner-oder-aller-Benutzer“) sowie Umgebungsvariable/typische Anwendungsfälle (Abschnitt „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.

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]:

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:

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:

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:

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

pip3 BEFEHL -h 

also z.B.:

pip3 install -h 

Eine komplette Übersicht findet man in den Man-Pages von pip.

Beispiele

Der folgende Befehl installiert das Modul "Markdown" lokal für den aktuellen Benutzer:

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:

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":

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:

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:

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:

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

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 Jinja2: direkt aus dem Git-Repositry lokal installiert:

pip3 install https://github.com/pallets/jinja/archive/master.zip 

Details dazu findet man in der offiziellen Dokumentation 🇬🇧.

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

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 Version 23.04 Lunar Lobster implementiert Ubuntu das Python Enhancement Proposal (PEP) 668 🇬🇧, 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:

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 sys.path 🇬🇧 (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 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:

  • python3-setuptools (universe)

Befehl zum Installieren der Pakete:

sudo apt-get install python3-setuptools 

Oder mit apturl installieren, Link: apt://python3-setuptools

Dies hat allerdings den Nachteil, dass aus dem 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 gewohnten Pfade: :

pip3 install --break-system-packages setuptools 

pipx bzw. virtuelle Umgebungen nutzen

Eine weitere Möglichkeit stellt dar, isolierte Umgebungen für die Paketinstallation (Virtual Environments) zu nutzen, bspw.:

python3 -m venv .venv/
.venv/bin/pip3 install setuptools 

Das Kommandozeilen-Programm pipx 🇬🇧 stellt als (nicht die vollständige Funktionalität bietendes) 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:

  • pipx (universe)

Befehl zum Installieren der Pakete:

sudo apt-get install pipx 

Oder mit apturl installieren, Link: apt://pipx

Keine Alternative ist es jedoch, wenn man Python-Bibliotheken installieren möchte oder eigene Programme mit zahlreichen Abhängigkeiten entwickelt.

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:

pipx install poetry
poetry 

Markierung als extern verwaltet löschen

Eine (unsaubere und nicht empfohlene) Lösung ist außerdem, die Markierungsdatei 🇬🇧, die Python mitteilt, dass die Pakete extern verwaltet werden, zu löschen:

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:

pip3 freeze --user | grep -v '^\-e' | cut -d = -f 1  | xargs -n1 pip3 install -U   

Manuelle Deinstallation

Hat man die Paketverwaltung pip manuell mit dem Script get-pip.py installiert, kann man diese mit folgendem Befehl wieder deinstallieren.

sudo python3 -m pip uninstall pip 

Da bei der Installation automatisch auch (wenn noch nicht vorhanden) die Setuptools installiert werden, kann man den Befehl noch mit setuptools erweitern, falls man die setuptools nicht benötigt:

sudo python3 -m pip uninstall pip setuptools 

Diese Revision wurde am 30. Januar 2024 18:47 von karzer erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Python, Paketverwaltung