Überschreibt pip von apt-get installierte Pakete?


9

Was passiert, wenn ich versehentlich pip installein Paket installiert habe, das ich bereits zuvor installiert habe apt-get? Kann ich einfach die neueste Version verwenden (dh wahrscheinlich die, mit der ich sie installiert habe pip)? Was passiert umgekehrt?

Hinweis: Ich verwende Python nicht in einer virtuellen Umgebung (einfach weil ich nicht weiß, warum ich es tun soll - ich verwende Python als Datenanalysetool und versuche meistens, die neueste Version von allem zu verwenden).


Wenn ich mich nicht irre, installieren Sie nicht die gleichen Pakete mit apt-getundpip
Lucio

Corerct, pipinstalliert sie /usr/localstandardmäßig in Unterverzeichnissen oder in einem anderen Verzeichnis, wenn Sie möchten.
Timo

3
Aber was passiert zum Beispiel, wenn ich zuerst apt-get install python-pandasgefolgt bin pip install pandasoder umgekehrt? Woher weiß meine globale Python-Installation, welche der beiden Versionen verwendet werden soll?
Fred S

1
@FredS: Führen Sie den folgenden Befehl im Terminal aus, Python sucht in dieser bestimmten Reihenfolge nach einem Modul:python -c "import sys; print sys.path"
Timo

Antworten:


3

Wie @Timo in seinem Kommentar erwähnt hat python -c "import sys; print sys.path", erhalten Sie den Ladepfad des Python-Moduls für Ihre Installation von Python. Bei einer relativ neuen Installation vom 16.04. Gibt es drei wichtige Verzeichnisse (unter den insgesamt 10, die sich in meinem befanden):

  • '' (Anwendungsverzeichnis)
  • '/usr/local/lib/python2.7/dist-packages' (wo pip Module installiert)
  • '/usr/lib/python2.7/dist-packages' (wo apt Module installiert)

Am wichtigsten ist jedoch, dass '/usr/local/lib/python2.7/dist-packages' Vorrang vor '/usr/lib/python2.7/dist-packages' hat.

Wenn Sie ein Python-Paket zuerst über apt (-get) installieren, wird es in '/usr/lib/python2.7/dist-packages' installiert. Wenn Sie später versuchen, das Modul mit pip zu installieren, gibt pip zunächst eine Warnung aus, dass die Abhängigkeit bereits erfüllt ist, und beendet das Programm. Durch Hinzufügen des Flags --upgrade wird pip zur Installation gezwungen, und das Modul wird in '/usr/local/lib/python2.7/dist-packages' installiert. (Beachten Sie die Ausgabe, die auch besagt, dass die Version in '/usr/lib/python2.7/dist-packages' nicht deinstalliert ist.) Sie können dann überprüfen, ob die von Pip installierte Version die folgende ist : python -c "import MODULE; print MODULE.__file__".

Als solches zeigt dies, dass über pip installierte Pakete Vorrang vor vom System installierten Paketen haben, aber nichts, was von apt (-get) installiert wurde, überschreiben.


1

Um @Bryan Wyatt hinzuzufügen, erscheint es wünschenswert (und beabsichtigt), dass installierte / aktualisierte PIP-Elemente Vorrang vor (wahrscheinlich älteren) installierten APT-Paketen haben. Bei meinem System waren die Apt- und Pip-Pfade umgekehrt. Es sollte sein (andere Einträge ignorieren):

  • '/usr/local/lib/python2.7/dist-packages' (wo pip Module installiert)
  • '/usr/lib/python2.7/dist-packages' (wo apt Module installiert)

Aufgrund einer unbekannten Maßnahme, die ich ergriffen haben muss, wurden diese Pfade für mich jedoch in umgekehrter Reihenfolge angezeigt (wobei andere Einträge ignoriert wurden):

  • '/usr/lib/python2.7/dist-packages' (wo apt Module installiert)
  • '/usr/local/lib/python2.7/dist-packages' (wo pip Module installiert)

Es stellt sich heraus, dass ich etwas hinzugefügt /usr/lib/python2.7/dist-packageshabe /usr/local/lib/python2.7/dist-packages/easy-install.pth. Durch einfaches Entfernen der Leitung wurde easy-install.pthdie Fehlordnung für mich behoben. /usr/lib/python2.7/dist-packagesist immer noch auf meinem Weg, da es zu einem späteren Zeitpunkt an anderer Stelle hinzugefügt wird.

Als Randnotiz zeigt pprint Ihren Pfad schöner an ... dh:

$ python -c "import sys; import pprint; pprint.pprint(sys.path)"
['',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages/PILcompat',
 '/usr/lib/python2.7/dist-packages/gtk-2.0',
 '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.