我试图在Mac OS 10.10上使用python3.7.3导入opencv2,但是发生ImportError。我该怎么解决?
我尝试使用pip,pip3和homebrew安装opencv3。可能没有正确安装。
import cv2
import numpy as np
import sys
import pytesseract as py
import matplotlib.pyplot as plt
错误
Traceback (most recent call last):
File "/Users/wujian/Desktop/Project/Proj.py", line 1, in <module>
import cv2
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/cv2/__init__.py", line 3, in <module>
from .cv2 import *
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/cv2/cv2.cpython-37m-darwin.so, 2): Symbol not found: _clock_gettime
Referenced from: /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/cv2/.dylibs/libavutil.56.22.100.dylib (which was built for Mac OS X 10.12)
Expected in: /usr/lib/libSystem.B.dylib
in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/cv2/.dylibs/libavutil.56.22.100.dylib
答案 0 :(得分:0)
该问题似乎(单方面)与您的 libavutil 副本有关,该副本是 ffmpeg 的一部分。
错误消息的这一部分提示了此信息:
ImportError: dlopen(/.../cv2/cv2.cpython-37m-darwin.so, 2): Symbol not found: _clock_gettime
Referenced from: /...python3.7/site-packages/cv2/.dylibs/libavutil.56.22.100.dylib (which was built for Mac OS X 10.12)
安装 OpenCV 需要 ffmpeg 。如果您安装了via homebrew,它将列为依赖项。
$ brew info opencv
...
==> Dependencies
Build: cmake ✓, pkg-config ✓
Required: eigen ✓, ffmpeg ✓, glog ✓, ...
安装 ffmpeg 将包含 libavutil 库,可以通过by downloading pre-built shared libraries或by Homebrew进行检查:
$ brew list ffmpeg | grep libavutil.*dylib
/usr/local/Cellar/ffmpeg/4.1.4_1/lib/libavutil.56.22.100.dylib
/usr/local/Cellar/ffmpeg/4.1.4_1/lib/libavutil.56.dylib
/usr/local/Cellar/ffmpeg/4.1.4_1/lib/libavutil.dylib
现在,您的问题是系统上的 libavutil (和 ffmpeg )与Mac 10.10不向后兼容。它是针对较新的Mac 10.12构建的,该Mac 10.12似乎已对clock_gettime
API进行了更改,从而导致“ 未找到符号”错误。这也已报告给opencv-python issues:
这与OpenCV不相关。错误来自libavutil (= FFmpeg)通过自制程序安装。错误与 二进制向后兼容性(显然,Apple已更改了 libsystem接口)。我对苹果的生态系统不太熟悉,但是 如果较早的OS版本构建FFmpeg,则可能会解决此问题 最新的OS版本中也存在较旧的符号。充分 可能无法实现macOS上的向后兼容性。
我只是被这个问题深深地困扰着 依赖FFmpeg的目标是10.12,但我的目标是10.11。希望有一个 即将发布。
请注意,虽然降级Xcode也可能有效,但正确的方法是 针对macOS的早期版本的目标是添加例如 -mmacosx-version-min = 10.11或-mmacosx-version-min = 10.6到CFLAGS / CXXFLAGS / LDFLAGS;这将调整头文件,编译器和链接器 生成至少与该版本的兼容的二进制文件 macOS。
唯一的解决方案似乎是安装与Mac 10.10兼容的旧版本的 ffmpeg (带有 libavutil ),然后告诉OpenCV链接到那个旧版本。您可能还需要从源代码构建OpenCV(请参见Configure and Build OpenCV to Custom FFMPEG Install)。
您也可以尝试在SuperUser上查看此帖子:
Which ffmpeg package I should download for macOS?