一个奇怪的问题和奇怪的解决方案

背景

最近想学学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 有什么关系呢?没有这个模块,也只是提示重复导入了,并没有影响功能啊

暂时还没有搞明白,有了进展再补充

你可能感兴趣的:(杂谈,python,pip)