我正在关注lynda openCV python课程及其opencv安装指南,但却坚持导入cv2。
我使用pip3 install opencv-python
安装cv2。
当我的当前目录为/usr/local/lib/python3.6/site-packages
时,我仅导入cv2。其他任何地方都会给我
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'cv2'
以下是我的系统版本:
Python 3.6.0
macOS High Sierra 10.13.2
Opencv version '3.4.0'
这里是__init__.py
中找到的/usr/local/lib/python3.6/site-packages/cv2
,但不确定这是多么重要
import importlib
import os
from .cv2 import *
from .data import *
# wildcard import above does not import "private" variables like __version__
# this makes them available
globals().update(importlib.import_module('cv2.cv2').__dict__)
我添加了这段代码,它似乎可以在任何目录下工作,但问题是为什么我必须这样做?我可以从任何地方导入numpy ......很奇怪
import sys
sys.path.append('/usr/local/lib/python3.6/site-packages')
答案 0 :(得分:3)
这是因为您的cv2.so已编译的库文件。如果您查看/usr/local/lib/python3.6/site-packages/cv2/python-3.6文件夹(或者对于某些用户,则在/usr/local/python/cv2/python-3.6文件夹中),看到文件cv2.cpython-36m-darwin.so就像这样:
(cv) fangran@Fangs-MacBook-Pro ~ % ls /usr/local/lib/python3.6/site-packages/cv2/python-3.6
cv2.cpython-36m-darwin.so
现在,您要做的是将CD插入该目录并将其重命名为cv2.so(这样更容易)
(cv) fangran@Fangs-MacBook-Pro ~ % cd /usr/local/lib/python3.6/site-packages/cv2/python-3.6
(cv) fangran@Fangs-MacBook-Pro python-3.6 % sudo mv cv2.cpython-36m-darwin.so cv2.so
如果您在虚拟环境中(建议使用),请确保进入该环境的站点程序包并进行符号链接:
(cv) fangran@Fangs-MacBook-Pro site-packages % cd ~/.virtualenvs/cv/lib/python3.6/site-packages/
(cv) fangran@Fangs-MacBook-Pro site-packages % ln -s /usr/local/python/cv2/python-3.6/cv2.so cv2.so
或者,如果没有,只需确保您所处的环境都可以访问cv2.so文件。