小背景
周四晚上发现之前写的程序不能用了,不知道是系统中使用了bootstrap的原因还是什么。为了方便,我把系统也放在了和之前做实验的conda环境。一开始不管算法还是系统都可以使用,但就那天晚上说部署一下Django项目,顺便再测一下代码(周日抽检,需要准备初稿,程序和PPT),结果就用不了了。晚上没有解决,周五上午早起花费1h左右解决了问题。特此记录一下排坑日记,因为担心未来可能还会遇到相同或者类似的bug。
报错一
RuntimeError: module compiled against API version 0xb but this version of numpy is 0xa
Traceback (most recent call last):
File "xxx.py", line 1, in <module>
import cv2
File "/xxx/xxx/miniconda3/envs/xxx/lib/python3.6/site-packages/cv2/__init__.py", line 181, in <module>
bootstrap()
File "/xxx/xxx/miniconda3/envs/xxx/lib/python3.6/site-packages/cv2/__init__.py", line 153, in bootstrap
native_module = importlib.import_module("cv2")
File "xxx/xxx/miniconda3/envs/xxx/lib/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ImportError: numpy.core.multiarray failed to import
(报错中的xxx代表一些个人信息或者代码)首先一开始我看到bootstrap整个人是懵逼的,以为是bootstrap中有同名的cv2,后来发现不是。关于报错内容解释如下: RuntimeError: module compiled against API version 0xb but this version of numpy is 0xa Traceback (most recent call last)
是说OpenCV和Numpy版本不匹配。最后一行的ImportError: numpy.core.multiarray failed to import
大概意思是说有多个版本的Numpy包。
如果是因为多个版本的Numpy包问题,直接卸掉不用的版本即可。使用 pip show numpy
,我个人的结果显示只有一个1.19.5版本的,所以这个问题排除。关键问题出现在版本不匹配上,解决过程如下:
按照网上教程又装了一遍 opencv contrib
,OpenCV和OpenCV Contrib的主要区别是OpenCV Contrib包含了一些不是在OpenCV核心库中实现的功能,例如深度学习框架的支持、面部识别、三维重建等等。控制台的输出信息出现了 numpy>=1.13.3
字样,其实已经安装好的1.19.5是满足该要求的,但我还是降了版本。
pip install -U numpy==1.13.3
该命令将之前的版本卸载掉然后重新安装1.13.3版本
报错二
降版本后,运行程序,依旧报错,报错内容如下:
Traceback (most recent call last):
File "xxx.py", line 1, in <module>
import cv2; print(cv2.getBuildInformation())
File "/xxx/xxx/miniconda3/envs/xxx/lib/python3.6/site-packages/cv2/__init__.py", line 181, in <module>
bootstrap()
File "/xxx/xxx/miniconda3/envs/xxx/lib/python3.6/site-packages/cv2/__init__.py", line 175, in bootstrap
if __load_extra_py_code_for_module("cv2", submodule, DEBUG):
File "/xxx/xxx/miniconda3/envs/xxx/lib/python3.6/site-packages/cv2/__init__.py", line 28, in __load_extra_py_code_for_module
py_module = importlib.import_module(module_name)
File "/xxx/mmfan/miniconda3/envs/xxx/lib/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "/xxx/xxx/miniconda3/envs/xxx/lib/python3.6/site-packages/cv2/gapi/__init__.py", line 301, in <module>
cv.gapi.wip.GStreamerPipeline = cv.gapi_wip_gst_GStreamerPipeline
AttributeError: module 'cv2' has no attribute 'gapi_wip_gst_GStreamerPipeline'
报错内容不理解,之后使用降低OpenCV版本解决问题。
pip install opencv-python==4.5.5.64
运行该命令后,输出如下信息:
Looking in indexes: https://mirrors.aliyun.com/pypi/simple/
Collecting opencv-python==4.5.5.64
Downloading https://mirrors.aliyun.com/pypi/packages/67/50/665a503167396ad347957bea0bd8d5c08c865030b2d1565ff06eba613780/opencv_python-4.5.5.64-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (60.5 MB)
|████████████████████████████████| 60.5 MB 646 kB/s
Requirement already satisfied: numpy>=1.13.3; python_version < "3.7" in /xxx/xxx/miniconda3/envs/xxx/lib/python3.6/site-packages (from opencv-python==4.5.5.64) (1.13.3)
Installing collected packages: opencv-python
Attempting uninstall: opencv-python
Found existing installation: opencv-python 4.7.0.72
Uninstalling opencv-python-4.7.0.72:
Successfully uninstalled opencv-python-4.7.0.72
Successfully installed opencv-python-4.5.5.64
按照输出的信息来看版本都符合要求:numpy = 1.13.3,python = 3.6,报错解决。
报错三
运行程序,依旧报错……又是关于numpy版本的问题,报错内容如下:
File "xxx.py", line 2, in <module>
import timm
File "/xxx/xxx/miniconda3/envs/xxx/lib/python3.6/site-packages/tim在这里插入代码片m/__init__.py", line 2, in <module>
from .models import create_model, list_models, is_model, list_modules, model_entrypoint, \
File "/xxx/xxx/miniconda3/envs/xxx/lib/python3.6/site-packages/timm/models/__init__.py", line 1, in <module>
from .cspnet import *
File "/xxx/xxx/miniconda3/envs/xxx/lib/python3.6/site-packages/timm/models/cspnet.py", line 15, in <module>
import torch
File "/xxx/xxx/miniconda3/envs/xxx/lib/python3.6/site-packages/torch/__init__.py", line 190, in <module>
from torch._C import *
ModuleNotFoundError: No module named 'numpy.core._multiarray_umath'
报错表示该版本的numpy中没有xxx模块。很容易想到是因为版本过低,可是上面的报错解决后都是符合要求的版本啊,但还是试着更新了一下Numpy,又从1.13.3—>1.19.5。
pip install --upgrade numpy
该命令会卸载掉1.13.3版本的Numpy,安装最新版(我这里是1.19.5)。运行程序,没有报错,成功运行。文章来源:https://www.toymoban.com/news/detail-449310.html
总结
上面的排坑过程说明Numpy版本本身是没有问题的,问题在于OpenCV的版本太高了,两者不匹配。所以降低其版本即可。至于为什么之前可以运行,现在不行,尚不清楚原因,可能是在某个环节更新了一些版本。文章来源地址https://www.toymoban.com/news/detail-449310.html
到了这里,关于解决OpenCV与Numpy版本不匹配问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!