apt-get install python-xxx vs pip install

8

Ich versuche immer noch, dieses Problem zu verstehen, das ich habe, und habe eine Menge Beiträge zu sudo apt-get install python-XXXvs gelesen pip install, und ich verstehe den Kern davon (apt-get ist ein Paket-Repo, das von einer völlig anderen Gruppe von Leuten verwaltet wird, um zu pip, auto -Updates zusammen mit allem anderen, wenn ein Update verfügbar ist, es ist binär usw.). Es gibt jedoch einige bestimmte Dinge, die ich nicht verstehe und auf die ich keine Antworten finden konnte:

  1. Wenn ich aus irgendeinem Grund zuerst ein Paket installiere, z. B. numpy, mit sudo apt-get install numpyund dann später pip install numpy. Was geschieht? Wird numpy an anderer Stelle mit einer anderen Version erneut installiert (z. B. in .local / lib), sodass ich jetzt zwei unabhängige Versionen habe? Welches wird beim Importieren verwendet? (Wenn ich richtig verstanden habe, ist es separat und apt-get ist systemweit, aber ich habe widersprüchliche Antworten auf diese Frage gesehen, z. B. hier )

  2. Ich habe festgestellt, dass viele der Pakete auf apt-get im Vergleich zu pip ziemlich alt sind. zB zum Zeitpunkt des Schreibens von ipython 2.3.0 vs 4.0.3, numpy 1.10.2 vs 1.10.4, spyder 2.3.5 vs 2.3.8. Gibt es einen Vorteil, sudo apt-get installwenn zuerst ein folgt pip install? oder ist das nur dumm

  3. Ich habe festgestellt, dass mein Pip 1.5.6 war - es ist das aktuellste, wenn Sie dies tun sudo apt-get install python-pip. wohingegen es auf pip 8.0.2 ist! Ich glaube, das hat mir Probleme bereitet, denn mit dieser alten Version können Sie das gleiche Paket immer wieder installieren und es warnt nicht. Und irgendwie schreibt es nicht über das alte. Ich habe dies erkannt, weil ich das gleiche Paket (z. B. numpy) weiterhin deinstallieren kann und es immer noch da ist, wenn ich es tue pip show numpy. Und seltsamerweise wird immer derselbe Ordner (.local /) angezeigt, aber mit unterschiedlichen Versionen: S Ich habe also zwei Fragen dazu:

    ein. Was ist der beste Weg, um Pip zu installieren? Ich bin zur Zeit in Richtung lehnen sudo apt-get install python-pip, pip install pip, sudo apt-get purge python-pip. Ist das weise? Es scheint mir ein bisschen lächerlich.

    b. Jetzt, da ich weiß, dass viele meiner Pakete mit doppelten Installationen durcheinander gebracht wurden, wahrscheinlich weil einige mit apt-get und später mehrmals mit pip 1.5.6 installiert wurden, wie kann man am besten nach doppelten Installationen suchen und diese bereinigen? Ich vermute, es ist nicht sicher, ein Skript zu verwenden, um alle zu deinstallieren und neu zu installieren.

PS Ich war mir nicht sicher, ob ich dies als neue Frage oder als Antwort auf mein ursprüngliches Problem posten sollte. Da diese Frage viel prägnanter und allgemeiner ist, war ich der Meinung, dass sie besser getrennt werden sollte. Entschuldigung, wenn ich mich geirrt habe.

Memo
quelle
Mögliches Duplikat von apt get install vs pip install
muru
Ich beziehe mich tatsächlich auf diesen Beitrag in meiner Frage. Er war sehr hilfreich, um meine Verwirrung zu beseitigen, aber er beantwortet meine obigen Fragen nicht (zumindest konnte ich ihn nicht sehen)
Memo
Oh, in deiner anderen Frage. Ich habe mir nur die Liste der verlinkten Beiträge angesehen und sie dort nicht gesehen.
Muru

Antworten:

8

Für die Archive habe ich nach langem Ausprobieren Folgendes gefunden (im Nachhinein sind einige Teile sinnvoll, andere ziemlich verwirrend).

  • Wenn Sie sudo apt-get install python-xyz, wird das Paket in angezeigt pip list. Natürlich können Sie es in Python importieren, aber es erscheint nicht in pip.get_installed_distributions (). (Offensichtlich ist das Gegenteil nicht der Fall. Wenn Sie dies tun pip install xyz, wird es nicht in Ihrem Apt / Synaptic angezeigt.)

  • Nachdem sudo apt-get install python-xyzwenn Sie das tun , pip install xyzwas ab , die Sie haben auf der Version von pip passiert.

OLD v1.5.6 (die aktuelle Version wird unter Ubuntu PPA ausgeliefert):

  • Diese Version von pip (1.5.6) installiert nur eine neue Kopie von xyz an einem anderen Ort. Sie erhalten mehrere Kopien und dies verursacht ein großes Durcheinander. z.B:

    • numpy von apt-get ist 1.8.2 unter /usr/local/lib/python2.7/dist-packages
    • numpy from pip ist 1.10.4 unter ~ / .local / lib / python2.7 / site-packages
  • Wenn ich es pip install numpynoch einmal mache , wird es heruntergeladen und erneut installiert. Sie könnten also viele verschiedene Versionen haben, auf die Sie nicht wirklich zugreifen können. Ich kann pip install numpy5x machen, und dann kann ich pip uninstall numpy 5xmal machen! Natürlich können Sie darauf achten, dies nicht zu tun, aber manchmal sind die Installationsskripte anderer Software etwas nachlässig und können die Dinge durcheinander bringen. Unglaublich, dass Ubuntu diese Version von pip offiziell ausliefert.

NEU v8.0.2 (die aktuelle Version auf pip selbst):

  • Neuere Versionen von pip (z. B. 8.0.2, die sich auf pip befinden) lehnen es ab, dasselbe Paket zu installieren, da die Anforderung bereits erfüllt ist. Sie können also keine neue Version installieren. Dies ist ein gutes Verhalten (mehr dazu später, diese Version von pip zu bekommen).

  • In diesem Fall können Sie nur ein Upgrade durchführen, dh mit dem Flag -U installieren.

  • Wenn Sie jedoch versuchen, pip install -U xyzein mit sudo apt-get installiertes Paket zu verwenden, wird ein Berechtigungsfehler angezeigt, da apt-get in / usr / installiert wurde und Sie Root-Zugriff benötigen, um dort zu schreiben.

  • AFAIK haben Sie also keine andere Wahl sudo pip install -U xyz, als es aktualisieren zu können. In diesem Fall installiert pip das neueste Paket an derselben Stelle, an der sudo apt-get es geschrieben hat. zB in meinem Fall /usr/local/lib/python2.7/dist-packages. Das ist gut.

  • Es ist auch erwähnenswert, dass die Pakete auf apt oft ziemlich älter sind als die auf pip (z. B. numpy v1.8.2 vs 1.10.4, scipy 0.14.1 vs 0.17.0, ipython 2.3 vs 4.0.3, spyder 2.3.5 vs 2.3.8)

Meine aktuellen Gedanken sind also, die großen Dinge mit sudo apt-getz. B. sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy pythoN-Nose Spyder zu erledigen

und aktualisieren Sie sie dann (oder zumindest einige von ihnen) mit sudo pip install -U.

NB Es scheint ziemlich wichtig zu sein, den neuen Pip von pip zu bekommen (sehr meta)

sudo apt-get install python-pip
sudo pip install -U pip

PS Ich bin mir der virtuellen Umgebung bewusst, aber ich brauche sie momentan nicht. Ich brauche nur eine Entwicklungsumgebung.

Und hier ist ein kleines Skript zum Speichern einer Liste von Paketen, Versionen und Pfaden (funktioniert jedoch nur bei installierten Pip-Modulen, nicht bei Modulen von apt-get).

import pip
pp = pip.get_installed_distributions()
for p in sorted([p.location+"\t"+p.project_name+" ("+p.version+")" for p in pp]):
    print p
Memo
quelle