Ich versuche immer noch, dieses Problem zu verstehen, das ich habe, und habe eine Menge Beiträge zu sudo apt-get install python-XXX
vs 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:
Wenn ich aus irgendeinem Grund zuerst ein Paket installiere, z. B. numpy, mit
sudo apt-get install numpy
und dann späterpip 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 )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 install
wenn zuerst ein folgtpip install
? oder ist das nur dummIch 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 tuepip 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.
quelle
Antworten:
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 angezeigtpip 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 tunpip install xyz
, wird es nicht in Ihrem Apt / Synaptic angezeigt.)Nachdem
sudo apt-get install python-xyz
wenn Sie das tun ,pip install xyz
was 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:
Wenn ich es
pip install numpy
noch 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 kannpip install numpy
5x machen, und dann kann ichpip uninstall numpy 5x
mal 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 xyz
ein 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-get
z. B.sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy pytho
N-Nose Spyder zu erledigenund 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)
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).
quelle