Почему не обновляет пипс моего numpy и scipy?

Моя проблема в том, что pip не будет обновлять мои пакеты Python, даже если ошибок нет.

Он похож на этот, но я все еще теперь уверен, что делать. В принципе, ВСЕ мои пакеты для python выглядят смехотворно устаревшими, даже после обновления всего через pip. Вот подробности:

  • Я использую pip, версия 1.5.6.
  • Я использую Python, версия 2.7.5
  • Я нахожусь на Mac OSX, версия 10.9.5.

Используя это, я:

  • Моя версия numpy 1.6.2.
  • Моя scipy версия - 0.11.0.
  • Моя версия matplotlib - 1.1.1.

Даже после того, как я попытаюсь:

sudo pip uninstall numpy

Далее следуют:

sudo pip install numpy

Они оба успешно завершены, но когда я перехожу на python и проверяю версию numpy, она по-прежнему остается старой. (Как и все другие пакеты).

Не уверен, что здесь происходит?... Как это можно исправить? Постскриптум Я новичок в этом, поэтому мне могут потребоваться четкие инструкции. Благодарю. Кроме того, если кто-то хочет, я могу предоставить скриншот pip, поскольку он устанавливает numpy.

EDIT:

Команды, которые я запускал в соответствии с комментариями:

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

Ответ 1

В OS X 10.9 Apple Python поставляется с пакетом предустановленных дополнительных пакетов в каталоге с именем /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python. Включая numpy.

И как они устанавливаются (как если бы с помощью easy_install с древней версией setuptools до 0,7, но не в любом из обычных easy_install пунктов назначения), pip не знает что-нибудь о них.

Итак, что происходит, когда sudo pip install numpy устанавливает отдельную копию numpy в '/Library/Python/2.7/site-packages', но в вашем sys.path каталог Extras находится перед каталогом site-packages, поэтому import numpy все еще находит копию Apple. Я не уверен, почему это так, но это, вероятно, не то, с чем вы хотите обезьяны.


Итак, как вы это исправите?

Два лучших решения:

  • Используйте virtualenv и установите numpy и друзей в виртуальную среду вместо общесистемного. Это имеет недостаток, что вы должны научиться использовать virtualenv, но это определенно стоит сделать в какой-то момент, и если у вас есть время, чтобы изучить его сейчас, пойдите для него.

  • Перейдите на Python 3.x, либо из установщика python.org, либо через Homebrew. Python 3.4 или более поздняя версия поставляется с pip и не поставляется с любыми pip -независимыми предварительно установленными пакетами. И, в отличие от установки отдельного 2.7, он вообще не мешает Apple Python; python3 и python, pip3 и pip и т.д. все будут отдельными программами, и вам не нужно ничего узнавать о том, как работает PATH или что-то в этом роде. Это имеет недостаток, что вам нужно изучить Python 3.x, который некоторые основные изменения, так что опять-таки немного кривая обучения, но опять же, определенно стоит сделать в какой-то момент.


Предполагая, что ни один из них невозможен, я думаю, что самым простым вариантом является использование easy_install вместо pip для пакетов, которые вы хотите установить более новые версии любого из "дополнительных" приложений Apple. Вы можете получить полный список из них, посмотрев, что в /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python. При обновлении numpy вы, вероятно, также захотите обновить scipy и matplotlib; Я думаю, что все остальное несвязано. (Вы можете, конечно, обновить PyObjC или dateutil или что-нибудь еще, что вас беспокоит, но вам не нужно.)

Это не идеальное решение; существует множество причин, по которым easy_install уступает pip (например, не имея деинсталлятора, поэтому вам нужно будет запомнить, где находится этот путь /Library/blah/blah (или найти его снова с помощью распечатки sys.path изнутри Python). Обычно я бы не предложил easy_install для чего-либо, кроме readline и pip сам (а затем только с Apple Python). Но в этом случае я думаю, что это проще, чем другие альтернативы.

Ответ 2

Старый вопрос, но я нашел его, пытаясь решить эту проблему, опубликует свое решение.

Я обнаружил, что диагноз @abarnert является правильным и полезным, но мне не нравятся решения: я действительно хочу обновить версию numpy по умолчанию. Задача состоит в том, что каталог, в котором находятся эти ребята (о котором упоминается @abarnert), не может быть затронут даже sudo, так как они находятся в этой группе "колесо". На самом деле, если вы поедете туда и сделаете sudo rm -rf blah, это даст вам отказ в разрешении.

Чтобы обойти это, мы должны предпринять решительные действия:

  • Перезагрузите компьютер в режиме восстановления
  • Найдите терминал и введите csrutil disable
  • Перезагрузитесь нормально, затем обновите numpy с помощью pip2 install --user --upgrade numpy (и то же самое для любых других пакетов, у которых есть эта проблема).
  • Повторите шаги a и b, на этот раз изменив "disable" на "enable"

Примечание: "csrutil disable" - это серьезный бизнес, который может дестабилизировать ваш компьютер, я буду использовать его только тогда, когда это абсолютно необходимо, и снова включите его как можно скорее. Но AFAIK это единственный способ обновить пакеты Python в каталоге колес.

Ответ 3

Переименуйте numpy и scipy версии, установленные Apple в /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/, чтобы он начал использовать более новые версии, установленные Pip.