2014-10-15 5 views
11

Mein Problem ist, dass Pip meine Python-Pakete nicht aktualisieren wird, obwohl keine Fehler vorliegen.Warum aktualisiert Pip nicht mein numpy und scipy?

Es ist ähnlich wie , aber ich bin mir immer noch sicher, was zu tun ist. Im Grunde scheinen ALLE meine Pakete für Python lächerlich veraltet zu sein, selbst nachdem man alles über Pip aktualisiert hat. Hier sind die Details:

  • Ich benutze pip, Version 1.5.6.
  • Ich benutze Python, Version 2.7.5
  • Ich bin auf einem Mac OSX, Version 10.9.5.

dass verwenden, die ich habe:

  • Meine numpy Version 1.6.2 ist.
  • Meine scipy Version ist 0.11.0.
  • Meine Matplotlib Version ist 1.1.1.

Selbst nachdem ich versuchen:

sudo pip uninstall numpy 

Gefolgt von:

sudo pip install numpy 

sie beide erfolgreich abgeschlossen werden, aber wenn ich in Python gehen und überprüfen Sie die Version von numpy, es ist immer noch die alte. (Wie auch alle anderen Pakete).

Nicht sicher, was hier vorgeht? ... Wie kann das behoben werden? P.S. Ich bin neu in diesem Bereich, deshalb brauche ich vielleicht explizite Anweisungen. Vielen Dank. Wenn jemand will, kann ich auch einen Screenshot von pip zur Verfügung stellen, während es numpy installiert.

EDIT:

Befehle I gemäß den Kommentaren lauteten:

$which -a pip 
/usr/local/bin/pip 
$ head -1 $(which pip) 
#!/usr/bin/python 
$ which -a python 
/usr/bin/python 
+1

Sie haben mehr als eine Installation von 'python' und Ihr' pip' ist an einen anderen gebunden. –

+1

Wenn Sie nicht sicher sind, ob Sie neben Apple ein zusätzliches Python installiert haben, führen Sie alle folgenden Befehle aus und zeigen Sie uns die Ausgabe: 'which -a pip',' head -1 $ (welcher pip) ',' welche -a Python'. – abarnert

+0

Haben Sie auch Homebrew, MacPorts, Fink oder einen anderen Paketmanager? Wie hast du alle Voraussetzungen für 'matplotlib' und Freunde installiert? – abarnert

Antwort

14

In OS X 10.9, Apples Python kommt mit einem Bündel von vorinstalliert zusätzlichen Paketen, in einem Verzeichnis mit dem Namen /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python . Einschließlich numpy.

Und die Art, wie sie installiert sind (wie von easy_install mit einer alten pre-0.7-Version von setuptools verwenden, aber nicht in eine der normalen easy_install Destinationen), pip nichts über sie weiß.

Also, was passiert ist, dass sudo pip install numpy eine separate Kopie von numpy in '/Library/Python/2.7/site-packages' installiert -aber in Ihrem sys.path, das Extras Verzeichnis kommt vor dem site-packages Verzeichnis, so import numpy findet noch Kopie von Apple. Ich bin mir nicht sicher, warum das so ist, aber es ist wahrscheinlich nicht etwas, mit dem du etwas anfangen willst.


Also, wie behebst du das?

Die beiden besten Lösungen sind:

  • Verwenden virtualenv, und installieren Sie Ihre numpy und Freunde in einer virtuellen Umgebung, statt systemweit. Das hat den Nachteil, dass Sie lernen müssen, wie man virtualenv verwendet - aber das ist es definitiv wert, irgendwann zu tun, und wenn Sie die Zeit haben, es jetzt zu lernen, gehen Sie dafür.

  • Upgrade auf Python 3.x, entweder von einem Python.org-Installationsprogramm oder über Homebrew. Python 3.4 oder höher kommt mit pip und kommt nicht mit pip -unfreundlich vorinstallierten Paketen. Und anders als bei der Installation eines separaten 2.7, stört es Apple's Python überhaupt nicht; python3 und python, pip3 und pip usw. sind alles separate Programme, und Sie müssen nichts darüber lernen, wie PATH funktioniert oder irgendetwas davon. Das hat den Nachteil, dass man Python 3.x lernen muss, welches some major changes hat, also nochmal ein bisschen eine Lernkurve, aber nochmal, definitiv lohnt sich das irgendwann.


keiner von denen Unter der Annahme ist möglich, ich denke, die einfachste Möglichkeit ist, dass Sie neuere Versionen von jedem von Apples „Extras“ installieren mögen, für die Pakete easy_install statt pip, zu verwenden. Sie können eine vollständige Liste von denen erhalten, indem Sie schauen, was in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python ist. Wenn Sie numpy aktualisieren, möchten Sie wahrscheinlich auch scipy und matplotlib aktualisieren; Ich denke alles andere ist nicht verwandt. (Sie können natürlich PyObjC oder dateutil oder etwas anderes, das Sie dort interessieren, aktualisieren, aber Sie müssen nicht.)

Dies ist keine ideale Lösung; Es gibt viele Gründe, easy_install ist schlechter als pip (zB kein Deinstallationsprogramm, also wirst du dich erinnern müssen, wo das /Library/blah/blah Pfad ist (oder finde es wieder durch Ausdruck heraus sys.path von innen Python). Ich würde nicht t vorschlägt normalerweise easy_install für alles außer readline und pip selbst (und auch dann nur mit Apples Python). Aber in diesem Fall, ich denke, es ist einfacher, als die anderen Alternativen.

+0

Ich löschte gerade den Standard-Ordner numpy und das System konnte das in "/Library/Python/2.7/site-packages/numpy/" finden und es funktioniert! Denkst du, dass das sicher ist? –

+1

@Comptrol: Wenn du versuchst, das Python zu benutzen, dessen Site-Pakete das sind, hast du vielleicht etwas vermasselt, aber wenn das der Fall ist, sollte NumPy mit dem 'pip' von Python neu installiert werden es nicht, der Fehler wird Ihnen sagen, wie Sie es manuell beheben). Wenn Sie versuchen, ein anderes Python zu verwenden, dann spielen diese Site-Pakete sowieso keine Rolle, also ist es sicher. – abarnert

2

Benennen sie die numpy und scipy von Apple installierten Versionen in/System /Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/, damit es die neueren von Pip installierten Versionen verwendet

4

Alte Frage, aber Ich habe es gefunden, wenn ich versuche, dieses Problem zu lösen, werde meine Lösung veröffentlichen.

Ich fand @ abarnerts Diagnose korrekt und hilfreich, aber ich mag keine der Lösungen: Ich möchte wirklich die Standardversion von numpy aktualisieren. Die Herausforderung besteht darin, dass das Verzeichnis, in dem sich diese Leute befinden (was @barnert erwähnt wurde) selbst von sudo nicht berührt werden kann, da sie sich in dieser "Rad" -Gruppe befinden. In der Tat, wenn Sie dorthin gehen und sudo rm -rf blah tun, wird es Ihnen eine Erlaubnis verweigert Fehler geben.

Um dies zu umgehen, haben wir drastische Maßnahmen zu ergreifen: normalerweise

  1. Starten Sie den Computer im Wiederherstellungsmodus
  2. das Terminal finden und geben csrutil disable
  3. Reboot, dann ein Upgrade numpy mit pip2 install --user --upgrade numpy (und für alle anderen Pakete, die dieses Problem haben, gleich)
  4. Wiederholen Sie die Schritte a und b, diesmal ändern "deaktivieren" zu "aktivieren"

Hinweis: "csrutil disable" ist eine ernste Angelegenheit, die Ihre Maschine destabilisieren kann, ich würde sie nur verwenden, wenn es absolut notwendig ist, und sie so schnell wie möglich wieder aktivieren. Aber AFAIK ist die einzige Möglichkeit, Python-Pakete in einem Wheel-Verzeichnis zu aktualisieren.