背景
最近想学学OpenCV,先说说学习环境
- 软件:Python 3.11 + Pycharm + opencv、numpy、matplotlib
- 硬件:家里台式机,单位笔记本
- 代码放到github上,方便在两台机子之间同步
- 笔记本用win11系统
- 台式机原来安装了debian 12+KDE,最近换了win 10
表现
因为台式机上的debian(也许是KDE桌面)莫名其妙崩了,加上之前感觉输入法等各种小问题层出不穷,干脆换了win 10 LTSC。
从此,运行程序出现警告提示:
UserWarning: The NumPy module was reloaded (imported a second time).This can in some cases result in small but subtle issues and is discouraged.import numpy
原来没细想,因为我的代码是:
import cv2
import numpy
之前没有出现过,我也以为是自己做过什么设置但给忘了。于是想要忽略警告信息,在导入numpy之前加入:
import warnings
warnings.filterwarnings('ignore')
但该警告还是存在。我把这两行代码移到 import cv2 之前,警告消失了。说明第二次导入 numpy 模块的代码发生在cv2(也就是opencv-python模块)模块的代码中。
再仔细看看警告信息,发现提示问题出在cv2下的 __init__.py文件中。
这就奇怪了,如果是opencv模块的问题,其他机子包括台式机用Linux的时候都该有提示的。
分析和解决
我又尝试了导入 cv2、导入 numpy,都会出现重复导入numpy的提示;但导入 ping3 模块(这个模块可以调用本机的 ping 功能探测和其他主机连通与否),没有提示。再导入 matplotlib 模块,不仅提示重复导入 numpy,还提示:
ImportError: DLL load failed while importing _cext: 找不到指定的模块。
由于涉及到 DLL 的问题,八成是系统上缺什么运行时文件,在网上搜了一下,找到一个解决方案:
pip install msvc-runtime
原地址是:python中的matplotlib库运行出现“ImportError: DLL load failed while importing _cext: 找不到指定的模块。”的问题解决方法_importerror: dll load failed while importing _ext:-CSDN博客
结果不仅找不到指定模块的提示没有了,重复导入 numpy 模块的提示也没有了。
问题解决了,但想不明白
找不到DLL可以理解,win 10 LTSC 本来就是个官方精简版,而且更新不怎么积极,有些组件版本太低或者被精简掉是正常的。mscv-runtime只是补足了 matplotlib 缺失的部分(matplotlib 的windows版的部分底层功能是VC开发的)
但和 numpy 有什么关系呢?没有这个模块,也只是提示重复导入了,并没有影响功能啊
暂时还没有搞明白,有了进展再补充