2014-10-15 7 views
11

Mój problem polega na tym, że pip nie zaktualizuje moich pakietów Pythona, nawet jeśli nie ma błędów.Dlaczego PIP nie aktualizuje mojego numpy i scipy?

Jest podobny do this one, ale nadal jestem pewien, co robić. Zasadniczo, WSZYSTKIE moje pakiety dla Pythona wydają się absurdalnie nieaktualne, nawet po aktualizacji wszystkiego za pomocą pip. Oto szczegóły:

  • Używam pip, wersja 1.5.6.
  • Używam Pythona, wersja 2.7.5
  • Jestem na Mac OSX, wersja 10.9.5.

Korzystanie że mam:

  • Moja wersja numpy jest 1.6.2.
  • Moja wersja scipy to 0.11.0.
  • Moja wersja macplotlib to 1.1.1.

Nawet po Staram:

sudo pip uninstall numpy 

Obserwowani przez:

sudo pip install numpy 

Obaj zakończona pomyślnie, ale kiedy idę do Pythona i sprawdź wersję numpy, to nadal jest stary. (Podobnie jak wszystkie inne pakiety).

Nie wiesz, co się tutaj dzieje? ... Jak to naprawić? P.S. Jestem na to nowy, więc potrzebuję wyraźnych instrukcji. Dzięki. Ponadto, jeśli ktoś chce, mogę dostarczyć zrzut ekranu z pip podczas instalowania numpy.

EDIT:

Komendy wpadłem jak za komentarze:

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

Masz więcej niż jedną instalację 'python', a twój' pip' jest powiązany z innym. –

+1

Jeśli nie masz pewności, czy zainstalowałeś dodatkowy Python razem z Apple, uruchom wszystkie poniższe polecenia i pokaż nam dane wyjściowe: 'which -a pip',' head -1 $ (which pip) ',' który -a python'. – abarnert

+0

Masz również Homebrew, MacPorts, Fink lub inny menedżer pakietów? Jak zainstalowałeś wszystkie wymagania wstępne dla 'matplotlib' i przyjaciół? – abarnert

Odpowiedz

14

W OS X 10.9, Apple Python pochodzi z gronem zainstalowanych dodatkowych pakietów, w katalogu o nazwie /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python . W tym numpy.

I sposób są one instalowane (jakby za pomocą easy_install ze starożytnych sprzed 0,7 wersją setuptools, ale nie do żadnej z normalnych easy_install podróży), pip nie coś o nich wiedzieć.

Więc, co się dzieje, że sudo pip install numpy instaluje osobną kopię numpy do '/Library/Python/2.7/site-packages' -ale w swojej sys.path, katalog Extras przychodzi przed katalogu site-packages, więc import numpy nadal odnajduje kopię Apple. Nie jestem pewien, dlaczego tak jest, ale prawdopodobnie nie jest to coś, z czym chcesz się zepsuć.


Jak to naprawić?

Dwie najlepsze rozwiązania są:

  • Zastosowanie virtualenv i instalować numpy i przyjaciół w środowisku wirtualnym, a nie całego systemu. Ma to tę wadę, że musisz nauczyć się używać virtualenv - ale na pewno warto to zrobić w pewnym momencie, a jeśli masz czas, aby go teraz nauczyć, idź do niego.

  • Przejdź na język Python 3.x, albo z instalatora python.org, albo z Homebrew. Python 3.4 lub nowszy jest dostarczany z pip i nie jest dostarczany z żadnymi niezainstalowanymi pakietami pip. I, w przeciwieństwie do instalacji oddzielnego 2.7, nie zakłóca to w ogóle Pythona Apple; python3 i python, i pip itd., Wszystkie będą oddzielnymi programami i nie musisz się niczego dowiedzieć o tym, jak działa PATH. Ma to wadę, że musisz nauczyć się Python 3.x, który ma some major changes, więc znowu, trochę krzywej uczenia się, ale znowu, zdecydowanie warto to zrobić w pewnym momencie.


Zakładając, żadna z nich nie jest to możliwe, myślę, że najprostszym rozwiązaniem jest użycie easy_install zamiast pip, dla pakietów, które chcesz zainstalować nowsze wersje któregokolwiek z „dodatków” Apple'a. Możesz uzyskać pełną listę tych, patrząc na to, co jest w /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python. Po uaktualnieniu numpy, prawdopodobnie również chcesz zaktualizować scipy i matplotlib; Myślę, że wszystko inne nie ma związku. (Możesz oczywiście zaktualizować PyObjC lub dateutil lub cokolwiek innego, na czym Ci zależy, ale nie musisz tego robić.)

To nie jest idealne rozwiązanie; istnieje wiele powodów, dla których easy_install jest gorszy od pip (np. nie ma deinstalatora, więc będziesz musiał pamiętać, gdzie jest ta /Library/blah/blah ścieżka (lub znaleźć ją ponownie przez wydruk na zewnątrz sys.path z wnętrza Pythona). t zwykle sugerują easy_install do niczego z wyjątkiem readline i samą pip (i to tylko z Apple Python). Ale w tym przypadku, myślę, że to prostsze niż inne alternatywy.

+0

Właśnie usunąłem domyślny folder numpy i system był w stanie znaleźć ten w "/Library/Python/2.7/site-packages/numpy/" i to działa! Czy uważasz, że jest to bezpieczne? –

+1

@Comptrol: Jeśli próbujesz użyć Pythona, którego pakiety stron zostały, możesz zostawić rzeczy zepsuł, ale jeśli tak, to ponowne zainstalowanie NumPy z 'pip' Pythona powinno to naprawić (i, nawet jeśli nie, błąd powie Ci, jak to naprawić ręcznie). Jeśli próbujesz użyć innego Pythona, to i tak pakiety stron nie mają znaczenia, więc jest to bezpieczne. – abarnert

2

Zmień nazwę zainstalowanego przez firmę Apple w numpy i wersje scipy/systemu /Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/, więc zaczyna korzystać z nowszych wersji zainstalowanych przez Pip.

4

Stare pytanie, ale Znalazłem go, próbując rozwiązać ten problem, opublikuję moje rozwiązanie.

Stwierdziłem, że diagnoza @ abarnert jest poprawna i pomocna, ale nie podoba mi się żadne z rozwiązań: naprawdę chcę uaktualnić domyślną wersję numpy. Wyzwanie polega na tym, że katalog, w którym znajdują się ci faceci (o którym wspomniał wyżej), nie można dotknąć nawet przez sudo, ponieważ są oni w tej grupie "kółka". W rzeczywistości, jeśli przejdziesz tam i zrobisz sudo rm -rf blah, spowoduje to błąd odmowy uprawnień.

Aby obejść ten problem, musimy podjąć drastyczne działania:

  1. ponownie uruchomić komputer w trybie awaryjnym
  2. Znajdź terminal i wpisać csrutil disable
  3. Reboot normalnie, a następnie uaktualnić numpy z pip2 install --user --upgrade numpy (i to samo dla innych pakietów, które mają ten problem)
  4. Powtórz kroki aib, tym razem zmieniając "disable" na "enable"

Uwaga: "csrutil disable" to poważna firma, która może zdestabilizować twoją maszynę, użyłbym jej tylko wtedy, gdy jest to absolutnie konieczne i ponownie ją włączę. Ale AFAIK to jedyny sposób na uaktualnienie pakietów Pythona w katalogu kół.

Powiązane problemy