如何修复 Python 中的“ImportError:动态模块未定义模块导出函数 (PyInit_cv2)”错误?
Posted
技术标签:
【中文标题】如何修复 Python 中的“ImportError:动态模块未定义模块导出函数 (PyInit_cv2)”错误?【英文标题】:How to fix 'ImportError: dynamic module does not define module export function (PyInit_cv2)' error in Python? 【发布时间】:2018-12-26 02:27:16 【问题描述】:我正在通过运行python main.py
(包含import cv2
语句)运行使用opencv 模块的深度学习代码,但总是收到错误'ImportError: dynamic module does not define module export function (PyInit_cv2)'
。
我尝试重新安装我的 anaconda 并创建新的虚拟环境,但都得到了相同的结果。这个问题真的让我很困惑,我用谷歌搜索了许多相关的问题,但没有一个有效。我认为问题与环境有关,与代码无关,因为我在 python 提示符下简单地运行import cv2
得到了相同的结果。更令人困惑的是,即使我删除了 opencv 模块,我也遇到了同样的问题,但不是ModuleNotFoundError
。有人可以给我一些建议吗?非常感谢!
【问题讨论】:
【参考方案1】:我想我找到了这个错误的一个可能原因。
最近在一台服务器上配置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
排在当前工作目录之后(This是一篇介绍python查找包机制的好文章)。所以当我们进入py35环境时,python会先寻找$PYTHONPATH
,然后找到根目录下安装的opencv,而不是使用conda install opencv-python
在虚拟环境中寻找opencv。
所以这个问题有两种解决方案:
-
改用 python2。
从
$PYTHONPATH
中删除/usr/local/opencv-2.4.13/build/lib
。
这一切都对我有用。
【讨论】:
【参考方案2】:类似的帖子,可能会有所帮助: ImportError: dynamic module does not define init function (initfizzbuzz)
您能否提供有关如何安装 CV 模块的信息?
【讨论】:
我以前读过那篇文章,但它似乎对我不起作用。我试过conda install opencv
和pip install opencv-python
,但都返回相同的错误。【参考方案3】:
我遇到了同样的问题,这是由/usr/local/lib/python2.7/site-packages/cv2.so
中的cv2.so
文件引起的。在我删除文件并使用命令sudo pip3 install opencv-python
后,它适用于python3。
【讨论】:
以上是关于如何修复 Python 中的“ImportError:动态模块未定义模块导出函数 (PyInit_cv2)”错误?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows 10 上修复 Python 3 中的 notify2 'dbus' 错误
如何在 Ubuntu 上修复 Dataframe Python 中的 Traceback 问题