如何降级numpy?

问题描述 投票:3回答:2

我收到了错误

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)
python numpy jupyter-notebook
2个回答
6
投票

您可能在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。 (请。)

Probably The Right Thing to Do

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

(相关: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。


2
投票

我怀疑你真的需要或者想要降级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。你可能有一个名为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。
© www.soinside.com 2019 - 2024. All rights reserved.