如何降级numpy?

a14dhokn  于 2023-10-19  发布在  其他
关注(0)|答案(4)|浏览(218)

我出错了

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)
new9mtju

new9mtju1#

你可能会在python 2、python3和不同的pythonx 1 e0f1x之间感到困惑。
这是最可靠的消息来源,在你的情况下

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

要升级/降级numpy,您需要使用与您正在使用的python对应的pip。我想你用的是Python 2.7。查找与/usr/local/lib/python2.7/dist-packages/pip上安装的软件包对应的pip可执行文件。
这不是“正确”的方法,但它会工作

python -m pip install numpy==x.y.z
  • python将只对应于您正在使用的Python解释器
  • -m pip将找到与您的python 2.7安装对应的正确pip
  • 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]

继续添加这些类型Assert,直到找到bug。

ulmd4ohb

ulmd4ohb2#

您可以使用--upgrade标志进行降级,它可以双向工作,例如

pip install --upgrade numpy==1.10.1
56lgkhnf

56lgkhnf3#

我怀疑你真的需要,或者想要,降级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。
fcipmucu

fcipmucu4#

对于那些想要更换(升级或降级)他们的NumPy版本的人,只需:

pip install -U numpy==x.x.x

其中x.x.x属于您所需的NumPy版本,-U将强制升级并删除已安装的软件包。事实上,这实际上可能适用于任何pip软件包。

相关问题