为什么pip没有更新我的numpy和scipy?

12

我的问题是pip无法更新Python包,即使没有错误。这与此问题类似,但我仍然不确定该怎么做。基本上,尽管我通过pip更新了所有内容,但我所有的python包似乎都过时了。以下是详细信息:

  • 我使用的是版本为1.5.6的pip。
  • 我使用的是版本为2.7.5的Python。
  • 我使用的是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时的屏幕截图。

编辑:

根据评论运行的命令:

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

1
您安装了多个 python 版本,而您的 pip 绑定到了另一个版本。 - Brian Cain
1
如果您不确定是否在Apple的Python之外安装了额外的Python,请运行以下所有命令并向我们显示输出:which -a piphead -1 $(which pip)which -a python - abarnert
此外,您是否安装了Homebrew、MacPorts、Fink或其他软件包管理器?您是如何安装所有与matplotlib和相关依赖项的先决条件? - abarnert
@abarnert 我用Homebrew安装了所有东西,除了pip,我是通过sudo easy_install pip来安装的。 - Spacey
@abarnert,我已经在问题中添加了信息。我该如何解决这个问题?谢谢。 - Spacey
显示剩余5条评论
3个回答

14
在OS X 10.9中,苹果的Python附带了一堆预安装的额外包,位于名为/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python的目录中,包括numpy
它们的安装方式(就好像使用一个古老的0.7版本之前的setuptools使用easy_install一样,但不会安装到任何一个正常的easy_install目标中),pip对它们一无所知。
因此,sudo pip install numpy将独立地安装一个numpy副本到'/Library/Python/2.7/site-packages',但在您的sys.path中,Extras目录位于site-packages目录之前,因此import numpy仍然可以找到苹果的副本。我不确定为什么会这样,但这可能不是您想要操纵的东西。
所以,如何修复这个问题?
最好的两种解决方案是:
  • 使用 virtualenv,并将您的 numpy 和相关库安装到虚拟环境中,而不是系统范围内。这样做的缺点是您必须学习如何使用 virtualenv ——但这绝对值得在某个时候去做,并且如果您现在有时间学习它,那就去学吧。

  • 升级到 Python 3.x,可以通过 python.org 安装程序或通过 Homebrew 安装。Python 3.4 或更高版本附带 pip,并且不会安装任何不友好的预安装包。与安装单独的 2.7 不同,它不会干扰 Apple 的 Python;python3pythonpip3pip 等都是独立的程序,您不需要了解 PATH 的工作原理或其他任何内容。这样做的缺点是您必须学习 Python 3.x,其中有一些重大变化,因此需要一定的学习曲线,但是绝对值得在某个时候去做。


假设以上两种方法都不可行,我认为最简单的选择是使用easy_install而不是pip来安装你想要安装新版本的任何苹果“额外”软件包。你可以通过查看/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python中的内容来获取完整列表。当你升级numpy时,你可能也想要升级scipymatplotlib;我认为那里的其他所有东西都与此无关。(当然,你可以升级PyObjCdateutil或任何其他你在意的东西,但你不必这样做。)

这不是一个理想的解决方案;有很多原因使得easy_installpip劣秀(例如,没有卸载程序,所以你必须记住那个/Library/blah/blah路径(或者通过在Python内部打印出sys.path来再次找到它)。我通常不建议除了readlinepip本身之外使用easy_install(而且仅限于Apple的Python)。但在这种情况下,我认为它比其他选择更简单。


我刚刚删除了默认的numpy文件夹,系统能够找到位于“/Library/Python/2.7/site-packages/numpy/”中的文件夹并且它可以正常工作!你认为这样做安全吗? - Özgür
1
@Comptrol:如果你试图使用的是Python的site-packages,那么可能会出现问题,但是如果是这样的话,使用该Python的pip重新安装NumPy应该可以解决问题(即使不行,错误信息也会告诉你如何手动修复)。如果你尝试使用不同的Python,则该site-packages无论如何都不重要,所以很安全。 - abarnert

4

虽然这是一个老问题,但当我尝试解决此问题时,发现了它,并想分享我的解决方案。

我认为@abarnert的诊断是正确和有帮助的,但我不喜欢任何一种解决方案:我真的想升级numpy的默认版本。挑战在于这些文件所在的目录(如@abarnert所提到的)甚至不能被sudo操作,因为它们在"wheel"组中。实际上,如果您进入该目录并执行sudo rm -rf blah命令,它会给出权限被拒绝的错误。

为了解决这个问题,我们必须采取极端行动:

  1. 以恢复模式重启计算机
  2. 找到终端并输入csrutil disable
  3. 正常重启,然后使用pip2 install --user --upgrade numpy(同样适用于其他出现此问题的包)升级numpy
  4. 重复步骤a和b,这次将"disable"更改为"enable"

注意: "csrutil disable"是一项严肃的业务,可能会破坏您的机器,我只建议在绝对必要的情况下使用它,并尽快重新启用它。但据我所知,这是升级wheel目录中的Python包的唯一方法。


2

将苹果在 /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/ 安装的 numpy 和 scipy 版本重命名,以便开始使用 Pip 安装的更新版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接