如何降级numpy?

时间:2018-08-18 20:25:50

标签: python numpy jupyter-notebook

我遇到错误

TypeError: slice indices must be integers or None or have an __index__ 
method

搜索解决方案,得到我需要降级numpy的版本,然后尝试使用此命令

python
import numpy 
numpy.__version__

得到

>>> numpy.__version__
'1.14.5'

但是当我使用

pip show numpy
Name: numpy
Version: 1.11.0
Summary: NumPy: array processing for numbers, strings, records, and 
objects.
Home-page: http://www.numpy.org
Author: NumPy Developers
Author-email: numpy-discussion@scipy.org
License: BSD
Location: /usr/local/lib/python3.4/dist-packages
Requires: 
Required-by: 

现在python使用的版本是什么?

命令

$ python3 -m pip --version
$ pip --version 
pip 18.0 from /usr/local/lib/python3.4/dist-packages/pip (python 3.4)

$ python -m pip --version
pip 18.0 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)

3 个答案:

答案 0 :(得分:5)

您可能会在python2,python3和其他python virtual environments之间感到困惑。

根据您的情况,这是最可靠的来源

$ python
>>> import numpy
>>> numpy.__version__
'1.14.5'

要升级/降级numpy,您需要使用与您使用的pip相对应的python。我认为您使用的是python 2.7。在pip处查找与安装的软件包相对应的/usr/local/lib/python2.7/dist-packages/pip可执行文件。

这不是“正确”的方法,但是会起作用

python -m pip install numpy==x.y.z
  • python仅与您使用的python解释器相对应
  • -m pip将找到与您安装的python 2.7相对应的正确点
  • numpy==x.y.z将强制降级

现在,您可能会遇到权限问题,这将诱使您使用sudo。此时,您可以尝试添加--user标志...,但是如果您确实需要使用sudo,则可以考虑创建virtualenv。 (请。)

可能是正确的做法

其他人对此发表了评论:也许您的索引实际上不是整数。

(相关:Slice indices must be integers or None or have __index__ method

在代码中找到索引到列表的位置,并确保它们实际上是整数。

assert isinstance(a, int), 'a must be an int'
assert isinstance(b, int), 'b must be an int'
x = y[a:b]

继续添加这些类型断言,直到找到错误为止。

答案 1 :(得分:2)

我怀疑您是否真的需要或想要降级NumPy。

但这不是您真正的问题。您想知道为什么pip在显示一件事而python在显示另一件事,以及您可以对此做些什么。


看到不同的原因是pippython不匹配。

运行python时,这就是Python 2.7,并且将import打包在/usr/local/lib/python2.7/的2.7库中。

运行pip时,它使用的是Python 3.4,并在/usr/local/lib/python3.4/的Python 3.4库中安装和查找内容。

因此,pip show numpy向您显示Python 3.4拥有的NumPy版本,它完全独立于Python 2.7具有的NumPy版本。

如果您不打算使用Python 2.7,则解决方案是改为运行Python 3.4,通常只需使用python3而不是python

如果您打算使用Python 2.7,则解决方案是使用随附的pip。您可能有一个名为pip2pip2.7的命令,但是最安全的方法是使用python -m pip而不是pip


作为一个旁注,鉴于安装了3.4 NumPy的位置,您似乎已经完成了apt-get python3-numpyyum python-numpy之类的安装工作,而不是pip install numpy。也可能像apt-get python2-numpy之类的东西也可以得到2.7版本。如果是这样,您可能想使用发行版的软件包管理器而不是使用pip来降级或升级,就像您最初安装它时一样。如果不是,则忽略此段。


如果这一切看起来太复杂了,但是您确实确实需要同时使用Python 2.7和Python 3.4,则应该考虑两件事:

  • 始终使用虚拟环境。尽可能不要在全球范围内安装任何东西;选择一个要安装的环境。无论处于活动状态的环境如何,pythonpip都适用于该环境。
  • 安装最新版本的Anaconda,以及最新版本的Python(今天为3.7),然后要求其安装3.4和2.7 conda环境。使用这些环境,甚至不要接触系统3.4和2.7。

答案 2 :(得分:2)

您可以使用--upgrade标志将其降级,例如,两种方法都可以使用

pip install --upgrade numpy==1.10.1