虚拟环境下cv2脚本运行正常,普通命令行提示No module named 'cv2'如何解决
问题原因
你遇到的报错是因为不同场景下调用的Python解释器不是同一个,对应的第三方包加载路径也不同:
- 你创建的
venv是隔离的独立Python运行环境,你安装的cv2仅存在于虚拟环境的包路径/home/pi/test/venv/lib/python3.7/site-packages下,系统全局的Python环境并没有安装cv2。 - 激活虚拟环境后,系统会自动将当前命令行的
python3指向虚拟环境内的解释器,运行脚本时会从虚拟环境的包路径找依赖,所以运行正常。 - 未激活虚拟环境时,调用的是系统全局的Python解释器,只会从全局包路径加载依赖,找不到仅在虚拟环境安装的cv2,就会抛出模块不存在的错误。
解决方法
以下3种方法按需选择即可:
- 方法1(最推荐,适合手动运行脚本):每次运行前先激活虚拟环境,避免不同项目的包版本冲突
普通命令行依次执行以下命令:
看到命令行前缀出现cd /home/pi/test source venv/bin/activate(venv)标识后,再执行python3 openCV_motion_detection_cam1.py即可正常运行,使用完可以输入deactivate退出虚拟环境。 - 方法2(适合自动运行/脚本调用场景):直接指定虚拟环境的Python解释器路径运行,无需手动激活
普通命令行直接执行:/home/pi/test/venv/bin/python3 /home/pi/test/openCV_motion_detection_cam1.py - 方法3(不推荐):直接给系统全局Python安装cv2,后续不需要激活虚拟环境也能运行
普通命令行执行:
该方法容易导致多项目依赖版本冲突,仅适合不需要多项目隔离的场景使用。pip3 install opencv-python
内容的提问来源于stack exchange,提问作者technocraze
相关产品推荐
相关产品推荐

