如何修复 Python 中的'ImportError: dynamic module does not define module export function (PyInit_cv2)'错误?



我正在运行一个关于深度学习的代码,该代码使用opencv模块,通过运行python main.py(包含import cv2语句),但总是得到错误'ImportError: dynamic module does not define module export function (PyInit_cv2)'

我试着重新安装我的蟒蛇并创建新的虚拟环境,但都得到了相同的结果。这个问题真的让我很困惑,我在谷歌上搜索了很多相关的问题,但都不起作用。我认为问题与环境有关,与代码无关,因为我只需在python提示符下运行import cv2就得到了相同的结果。更令人困惑的是,即使在我删除了opencv模块之后,我也会遇到同样的问题,但不是ModuleNotFoundError。有人能给我一些建议吗?非常感谢!

我想我发现了这个错误的一个可能原因。最近我在一台服务器上配置了caffe环境,我下载了opencv-2.4.13的源代码并手动编译,将/usr/local/opencv-2.4.13/build/lib添加到$PYTHONPATH中,caffe运行良好。之后,当我使用conda activate py35(使用python3.5)进入我的一个虚拟环境时,在python提示符下尝试了import cv2,得到了上面的错误。

我不确定,但我认为错误的原因是opencv-2.4.13编译了一个python2接口,所以它不能被python3导入。Python通过搜索sys.path中列出的目录来导入包,其中$PYTHONPATH位于当前工作目录之后的第二位(这是一篇介绍Python查找包机制的好文章)。因此,当我们进入py35环境时,python将首先查找$PYTHONPATH并找到安装在根目录上的opencv,而不是使用conda install opencv-python在虚拟环境中查找opencv。

因此,这个问题有两种解决方案:

  1. 请改用python2
  2. $PYTHONPATH中删除/usr/local/opencv-2.4.13/build/lib

这些都对我有效。

类似的帖子可能会有所帮助:ImportError:动态模块未定义init函数(initfizzbuzz)

您能提供有关如何安装CV模块的信息吗?

我遇到了同样的问题,这是由/usr/local/lib/python2.7/site-packages/cv2.so中的cv2.so文件引起的。在我删除该文件并使用命令sudo pip3 install opencv-python后,它对python3有效。

最新更新