Ubuntu 12.04 „Precise Pangolin“
pip ist ein Akronym für Pip Installs Python und ist eine Paketverwaltung für Python-Module. Es ist expliziter Ersatz und indirekter Nachfolger für das ältere easy_install
aus den Python Setuptools
Im direkten Vergleich orientiert sich die Syntax von pip an der von anderen Paketverwaltern, wie z.B. APT. Mehr Details zu den Unterschieden zwischen pip und easy_install findet man in der Dokumentation von pip.
pip installiert Python-Module, welche im Python Package Index aufgeführt sind. Außerdem besteht die Möglichkeit, Module direkt aus den Versionskontrollsystemen Subversion, Git, Mercurial und Bazaar zu laden und dann zu installieren.
Alle via pip installieren Module befinden sich bei globaler Installation im Verzeichnis /usr/local/lib/pythonVERSION/dist-packages/ bzw. einem Unterverzeichnis davon. Bei Verwendung von pip in Kombination mit virtualenv befinden sich die Module innerhalb des Modulverzeichnisse des "virtual environements".
pip kann direkt aus den Paketquellen installiert werden[1]:
python-pip (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install python-pip
sudo aptitude install python-pip
bzw. für Python 3:
python3-pip (universe, erst ab Ubuntu 12.10 in den Quellen)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install python3-pip
sudo aptitude install python3-pip
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 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.
pip ist ein Kommandozeilenprogramm. Die allgemeine Syntax lautet[2]:
pip BEFEHL OPTIONEN
Wenn mittels des Befehls ein Modul systemweit installiert oder deinstalliert wird, dann muss pip mit Root-Rechten aufgerufen werden[3]. Bei der Verwendung innerhalb eines virtual environments wird sudo
nicht benötigt.
Einige Befehle sind:
Befehle von pip | |
Befehl | Erklärung |
install MODUL | installiert das Modul MODUL |
uninstall MODUL | deinstalliert das Modul MODUL |
freeze | zeigt die Version aller installierten Python-Module an |
Eine komplette Übersicht findet man in den Man-Pages oder über den Aufruf von
pip -h
Die Optionen variieren je nach Befehl. Die vielleicht am häufigsten Option ist -U
in Kombination mit install
, wobei U
für "Update" steht. Es wird dann geprüft, ob eine neuere Version des Moduls zur Verfügung steht. Falls ja wird diese installiert.
Eine Übersicht über die jeweiligen Optionen erhält man über den Aufruf
pip BEFEHL -h
also z.B.:
pip install -h
Wie bereits in der Einleitung erwähnt, kann pip auch Module direkt aus einem Versionskontrollsystem herunterladen. Details dazu findet man in der offiziellen Dokumentation .
Der folgende Befehl installiert das Modul "markdown" systemweit:
sudo pip install markdown
[sudo] password for otto: Downloading/unpacking markdown Downloading Markdown-2.2.1.zip (362Kb): 362Kb downloaded Running setup.py egg_info for package markdown Installing collected packages: markdown Running setup.py install for markdown changing mode of build/scripts-2.7/markdown_py from 644 to 755 Converting docs/release-2.1.0.txt -> build/docs/release-2.1.0.html Converting docs/change_log.txt -> build/docs/change_log.html (...) changing mode of /usr/local/bin/markdown_py to 755 Successfully installed markdown Cleaning up...
Die Deinstallation sieht so aus:
sudo pip uninstall markdwon
[sudo] password for otto: Uninstalling Markdown: /usr/local/bin/markdown_py /usr/local/lib/python2.7/dist-packages/Markdown-2.2.1.egg-info /usr/local/lib/python2.7/dist-packages/markdown Proceed (y/n)? y Successfully uninstalled Markdown
Mit dem folgenden Befehl wird ein Modul aktualisiert, hier im Beispiel "u1db":
sudo pip install -U u1db
Downloading/unpacking u1db from https://launchpad.net/u1db/trunk/0.1.4/+download/u1db-0.1.4.tar.bz2 Downloading u1db-0.1.4.tar.bz2 (193Kb): 193Kb downloaded Running setup.py egg_info for package u1db warning: no files found matching 'Makefile' Downloading/unpacking dirspec from https://launchpad.net/dirspec/stable-4-2/4.1.2/+download/dirspec-4.1.2.tar.gz (from u1db) Downloading dirspec-4.1.2.tar.gz Running setup.py egg_info for package dirspec Requirement already up-to-date: paste in ./Paste-1.7.5.1-py2.7.egg (from u1db) Real name of requirement routes is Routes Requirement already up-to-date: routes in ./Routes-1.13-py2.7.egg (from u1db) Requirement already up-to-date: repoze.lru>=0.3 in ./repoze.lru-0.6-py2.7.egg (from routes->u1db) Installing collected packages: u1db, dirspec Found existing installation: u1db 0.1.2 Uninstalling u1db: Successfully uninstalled u1db Running setup.py install for u1db changing mode of build/scripts-2.7/u1db-client from 644 to 755 changing mode of build/scripts-2.7/u1db-serve from 644 to 755 warning: no files found matching 'Makefile' changing mode of /usr/local/bin/u1db-client to 755 changing mode of /usr/local/bin/u1db-serve to 755 Found existing installation: dirspec 4.0.0 Uninstalling dirspec: Successfully uninstalled dirspec Running setup.py install for dirspec Successfully installed u1db dirspec Cleaning up...
Wie an der Ausgabe zu sehen ist, prüft pip direkt, ob die Abhängigkeiten des Moduls ebenfalls aktuell sind. Sonst werden diese auch auf den neusten Stand gebracht.
Der folgende Befehl zeigt die Versionsnummer aller installierter Python-Module - auch derer, die über die Paketverwaltung von Ubuntu installiert wurden:
pip freeze
CouchDB==0.8 GnuPGInterface==0.3.2 Mako==0.7.1 MarkupSafe==0.15 PAM==0.4.2 PIL==1.1.7 Paste==1.7.5.1 Routes==1.13 Twisted-Core==12.2.0 Twisted-Names==12.2.0 Twisted-Web==12.2.0 ...