我正在运行一个关于深度学习的代码,该代码使用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。
因此,这个问题有两种解决方案:
- 请改用python2
- 从
$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有效。