我收到了错误
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: [email protected]
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)
您可能在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]
继续添加那些类型的断言,直到找到bug。
我怀疑你真的需要或者想要降级NumPy。
但这不是你的问题的真正含义。你想知道为什么pip
展示了一件事,python
正在展示另一件事,以及你能做些什么。
你看到不同的东西的原因是你的pip
不适合你的python
。
当你运行python
,这是你的Python 2.7,并且你的import
包来自你的2.7库,在/usr/local/lib/python2.7/
。
当你运行pip
时,它正在使用你的Python 3.4,并在你的Python 3.4库中安装和查找,这是在/usr/local/lib/python3.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
都将适合这种环境。