升级opencv-python到4.7版本出现导入错误,寻求替代解决办法
解决opencv-python 4.7.0.68在macOS Catalina 10.15.7的导入错误问题
问题背景
将opencv-python从4.6.0.66升级至4.7.0.68后,运行程序出现以下导入错误:
ImportError: dlopen(path/to/my/virtualenv/lib/python3.9/site-packages/cv2/cv2.abi3.so, 2): Symbol not found: _VTRegisterSupplementalVideoDecoderIfAvailable
降级回4.6.0.66后错误消失,程序恢复正常。在干净虚拟环境中仅执行import cv2也触发相同错误,推测是新版本opencv-python与macOS Catalina(10.15.7)的兼容性问题——_VTRegisterSupplementalVideoDecoderIfAvailable是仅在更高版本macOS中提供的系统函数。
已验证的临时解决方案
- 降级至兼容版本:执行以下命令回退到4.6.0.66:
pip install opencv-python==4.6.0.66
替代解决方案(可选尝试)
- 升级操作系统:将macOS升级到Big Sur(11.0)或更高版本,系统会自带
_VTRegisterSupplementalVideoDecoderIfAvailable函数,从根源解决符号缺失问题。 - 源码编译适配版本:针对Catalina系统编译opencv-python,可禁用视频IO模块以避开依赖:
- 安装编译依赖:确保已安装Xcode Command Line Tools、cmake、numpy
- 克隆并切换到对应版本:
git clone https://github.com/opencv/opencv.git cd opencv git checkout 4.7.0 - 编译安装:
mkdir build && cd build cmake -D CMAKE_BUILD_TYPE=RELEASE -D PYTHON_EXECUTABLE=$(which python3) -D BUILD_opencv_videoio=OFF .. make -j$(sysctl -n hw.logicalcpu) make install
- 尝试headless版本:安装不带GUI和视频组件的headless版本,可能绕过该依赖:
pip install opencv-python-headless==4.7.0.68
内容的提问来源于stack exchange,提问作者Adam Richard
相关产品推荐
相关产品推荐

