如何修复 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 opencvpip 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)”错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复Python中的“OverSampling”错误

如何在 Windows 10 上修复 Python 3 中的 notify2 'dbus' 错误

如何在 Ubuntu 上修复 Dataframe Python 中的 Traceback 问题

(Python)如何修复数据框列值中的数值表示错误

如何修复 Python(Django Rest 框架模板)中的 UnicodeDecodeError?

如何使用 Python 修复 Pyx 模块中的回溯错误?