【不降级的解决方案】ModuleNotFoundError: No module named ‘numpy.testing.decorators‘

之前发现代码报错,出现这个提示,第一反应是在百度和csdn上找,没想到找了一整圈,都在建议我用降级numpy的方法来解决

pip install numpy==1.17.0

注:当前代码因为包的版本出现问题时,除非在实现逻辑上新包引入了恶性bug(且包的维护者停止了更新或者无力解决 ),否则极其不推荐降级包;大多数因为升级了包的版本而让原先代码报错的原因,都是因为新的包里面对调用方法、命名空间这类顶层进行了修改,我们要做的事情是

  1. 找到对应包的官方API或者文档说明,阅读更新记录,发现问题根源
  2. 在对应新版本的API或者文档中,找到与原有代码出错处相同或相似的目录,看看新的包是否更新了语法或者调用方式
  3. 根据新的包的标准,重写自己的程序代码

根据这个报错的情景不同,可以将解决方法细分为以下两类

  • 自行主动import这个包时出错

出现这个问题的情况90%以上不是自己写的代码,而是跟随某个教程/代码包练习的时候出现这个问题,原因很简单:numpy.testing.decorators这个模块很不常用,如果真的是自己主动要用这个模块的,其代码能力应该不至于对着这个问题犯难,也不至于连包更新了都不知道……

还是以开头这张图里面的代码为例,开头的报错:
 

 图中直接指出了问题代码所在:

from numpy.testing.decorators import slow

 想要从numpy.testing.decorators这个模块里面引入与slow相关的命名空间,但是发现numpy.testing.decorators这个模块本身就不存在

阅读numpy的文档后发现,其实从1.15版本开始,试图使用numpy.testing.decorators就会收到warning(但是warning不是error,所以很多人忽略了)说当前用法会在未来版本淘汰

 

 而从1.18版本开始,numpy正式淘汰了numpy.testing.decorators这一系列模块名(注意:只是淘汰了模块名,他们实质上包含的内容还在),并且贴心地告诉用户,要用umpy.testing.decorators里面的功能(命名空间),只需要import numpy.testing 就够了,自当前版本开始的testing自动会包含原有的testing.decorations等子模块

图中三个黑框的大意:1、名字删了,别用了;2、 要用这个功能直接去import nunpy.testing;3、我1.15版本开始警告你了,瞅啥瞅,3个小版本还不够你改变代码习惯的吗?

所以以后直接

import numpy.testing

 就可以了,删掉旧代码里面任何提到numpy.testing.decorator的内容吧(或者将其替换为numpy.testing)

  • 引入其他包时被其他包自动import numpy.testing.decorator

这种情况稍麻烦一点,博主没有遇到,但是有其他博客提到了

import numpy 报错:ModuleNotFoundError: No module named ‘numpy.testing.nosetester‘ 晓物智联_52phm社区的博客-CSDN博客_import numpy报错import numpy 报错:ModuleNotFoundError: No module named ‘numpy.testing.nosetester’报错信息在import numpy的时候编译器提示这个问题,就很奇葩,报错信息如下所示ModuleNotFoundError: No module named 'numpy.testing.nosetester'解决方法感觉问题很奇怪,就搜索了一下,然后在stackoverflow上找到了解决方法,更新scipy模块的版本。问题的原因是nhttps://blog.csdn.net/qq_41731978/article/details/121126510?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-121126510-blog-124457581.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-121126510-blog-124457581.pc_relevant_default&utm_relevant_index=1ModuleNotFoundError: No module named ‘numpy.testing.nosetester‘解决方法_灵跃115的博客-CSDN博客更新了numpy和pandas,之后又出现了这样的问题,百度的答案是:参考这个链接:https://blog.csdn.net/qq_20674643/article/details/104969075说是scipy的版本问题,想想也是,刚刚才更新了numpy的版本,出现这个问题可能给是scipy和numpy版本的问题所以卸载scipy,在重新安装新版本的scipy就可以了。...https://blog.csdn.net/wang_ningning/article/details/112469585?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-112469585-blog-103738505.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-112469585-blog-103738505.pc_relevant_paycolumn_v3

这种情况出现时,就是因为其他包依赖于numpy.testing.decorator,因此当这个包在numpy早些版本被创建时,为了使用numpy.testing.decorator相关功能,它会自动去引入numpy.testing.decorator。而numpy更新后,这个包还没有更新,其内部代码仍然是 import numpy.testing.decorator,故报错。

解决方式也很简单,升级这个包到最新版本(而不是第一反应让numpy去降级!!!)

pip install --upgrade [包名]

一般来说,频繁更新、维护的包,当其依赖的numpy更新后,这个包的维护者也应该尽快修改自己包的内容,升级后就能解决这个bug。

如果作者坐视不管,或者这个包已经停止更新了,又或者这个包过于冷门以至于作者不知道这个bug存在,建议舍弃这个包,找类似功能的其它包来实现,或者这个时候才考虑降级numpy吧~.

后记/碎碎念

并非说降级一定不能用,但是降级一定不是第一选择,更不可能是唯一选择,提倡看到版本问题就降级的思路是一种很不科学的思路,我认为这是有害无益的。

冷知识:写下这篇博客时,numpy版本已经到1.22了,距离1.18版本发布已经过去三年了……

然而,前期搜攻略时,看到了如下发言,属实让人血压升高(已对关键身份信息打码,对事不对人) 

在2022年倡导大家把版本回退到2019年的版本???? 并且措辞十分坚定,“必须”这样做才能解决问题?

为了避免有人说我断章取义,这位博主其实放了下面这句话,

但是 ……我还是觉得整篇文章的误导性很强, 不讲其所以然,也不把自己搜到的关键信息放出来给大家讨论,一句轻飘飘的“没有用,大家可以自己试试”,引导大家“脑袋放空”,照做去降级就可以解决问题。

编程哪有现成的?都得自己去动脑筋,如果代码连同业务逻辑连同解决问题的思路都能100%搜出来,那世界上还要程序猿这种需要创造力的职业干什么呢?

  • 32
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 这个错误消息表明你没有安装 numpy 库的 testing.decorators 模块。请使用 pip 或其他包管理工具安装 numpy 库,并确保安装的版本包含 testing.decorators 模块。 ### 回答2: “No module named 'numpy.testing.decorators'”是一个错误信息,表示找不到名为'numpy.testing.decorators'的模块。 这个错误通常出现在使用Python中的NumPy库时。NumPy是一个常用的数学计算库,提供了大量的数值运算和矩阵操作函数。'numpy.testing.decorators'是NumPy库的一个子模块,用于进行测试和装饰器相关的操作。 要解决这个错误,我们可以尝试以下几个步骤: 1. 确保已经正确安装了NumPy库。可以使用命令`pip list`或`conda list`来查看已安装的库列表,确保NumPy在其中。 2. 如果NumPy库不在列表中,可以使用命令`pip install numpy`或`conda install numpy`来安装NumPy库。 3. 如果NumPy已经安装了,但仍然出现错误,可能是因为NumPy库版本过低或者存在冲突。可以尝试更新NumPy库至最新版本。 4. 如果更新NumPy后仍然出现错误,可能是因为Python解释器无法正确找到NumPy库的安装路径。可以尝试重新安装NumPy库,或者将NumPy库所在路径添加到Python解释器的环境变量中。 如果以上方法仍然不能解决问题,可能需要进一步检查系统环境和配置,或者在相关的技术论坛上寻求帮助。 ### 回答3: 这个错误出现的原因是无法找到numpy.testing.decorators模块。解决方法可以尝试以下几种: 1. 确保安装了numpy模块。可以使用pip install numpy命令来安装numpy模块。 2. 如果已经安装了numpy模块,但仍然出现这个错误,可能是因为numpy版本较老或者被损坏。可以尝试升级numpy模块,使用pip install --upgrade numpy命令来更新numpy。 3. 如果上述方法都没有解决问题,可能是因为其他模块依赖numpy.testing.decorators模块。可以尝试卸载并重新安装这些模块,或者查找并安装缺失的依赖模块。 4. 如果以上方法都没有解决问题,可以尝试在代码的开头添加以下语句: import sys sys.path.append('/path/to/your/numpy/installation/') 这将手动将numpy的安装路径添加到系统路径中,以便能够正确引用numpy模块。 5. 如果使用的是虚拟环境,请确保在正确的虚拟环境中执行代码,并检查该虚拟环境是否安装了numpy模块。 希望以上方法能够帮助您解决问题。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值