我遇到错误
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)
答案 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
在显示另一件事,以及您可以对此做些什么。
看到不同的原因是pip
与python
不匹配。
运行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
。您可能有一个名为pip2
或pip2.7
的命令,但是最安全的方法是使用python -m pip
而不是pip
。
作为一个旁注,鉴于安装了3.4 NumPy的位置,您似乎已经完成了apt-get python3-numpy
或yum python-numpy
之类的安装工作,而不是pip install numpy
。也可能像apt-get python2-numpy
之类的东西也可以得到2.7版本。如果是这样,您可能想使用发行版的软件包管理器而不是使用pip
来降级或升级,就像您最初安装它时一样。如果不是,则忽略此段。
如果这一切看起来太复杂了,但是您确实确实需要同时使用Python 2.7和Python 3.4,则应该考虑两件事:
python
和pip
都适用于该环境。答案 2 :(得分:2)
您可以使用--upgrade标志将其降级,例如,两种方法都可以使用
pip install --upgrade numpy==1.10.1