当然不止树莓派,配置python环境都可能存在这个问题
可能是因为安装的 numpy 或者 opencv 版本与 Python 的包路径不匹配。下面是问题的常见原因及解决方法:【方法一和二优先考虑】
原因分析
-
多版本 Python 环境冲突:
- 树莓派上可能有多个版本的 Python,例如
python3.7和python3.9。 pip3安装的numpy可能与python3命令所指向的 Python 版本不一致。
- 树莓派上可能有多个版本的 Python,例如
-
pip安装路径问题:- 显示
Defaulting to user installation表明numpy被安装在用户的本地路径下,而python3没有找到该路径。
- 显示
-
系统自带的
numpy旧版本冲突:- 系统
/usr/lib/python3/dist-packages中有旧版本的numpy,可能导致冲突。
- 系统
-
依赖问题:
OpenCV依赖的某些系统库可能缺失。
解决方法(推荐前三种方法-可能同时采用尝试)
方法 1:检查 Python 和 pip 版本匹配!!!
-
检查默认的 Python 和
pip路径:bashpython3 --version which python3 pip3 --version which pip3确保两者的路径一致,例如:
- 如果
python3是/usr/bin/python3,则pip3应该指向/usr/bin/pip3。
- 如果
-
如果路径不一致,可以指定 Python 版本的
pip:bashpython3.7 -m pip install numpy python3.7 -m pip install opencv-python 或者使用与使用与 python3 一致的 pip /usr/bin/python3 -m pip install opencv-python 这样可以确保 OpenCV 安装在 /usr/bin/python3 对应的环境中
方法 2:检查并修复安装路径!!!
-
查看
numpy的实际安装路径:bashpython3 -m site输出示例:
/usr/local/lib/python3.7/dist-packages /home/pi/.local/lib/python3.7/site-packages -
确认
numpy是否安装在其中一个路径中:bashls /home/pi/.local/lib/python3.7/site-packages/numpy -
如果安装路径正确,但 Python 未加载,可以手动设置路径:
bashexport PYTHONPATH=/home/pi/.local/lib/python3.7/site-packages:$PYTHONPATH -
确认后重启终端,并重试:
bashpython3 -c "import numpy; print(numpy.__version__)"
方法 3:系统包的路径增删查!!!
-
有时候一个环境下有多个相同包,怎么升级也不对,发现根本没有导入到正确的。
一旦成功导入了某个包,改变了导入顺序后,要重启kernel才能生效
pythonprint(sys.path) 查看系统路径和优先搜索顺序 print(numpy.__file__) 查看这个包来自哪个路径 print(numpy.__version__) 查看这个包的版本 sys.path.insert(0, 'path') 插入系统路径到最优先的顺序 sys.path.remove('path') # 从系统路径中去除掉
其他方法 4:重新安装 numpy
-
卸载所有 numpy:
bashpip3 uninstall numpy -y sudo apt remove python3-numpy -y -
重新安装:
bashpip3 install numpy --no-cache-dir
其他方法 5:使用虚拟环境隔离
为了避免系统环境的冲突,可以创建一个 Python 虚拟环境并重新安装 numpy 和其他依赖。
-
创建虚拟环境:
bashpython3 -m venv venv source venv/bin/activate -
安装依赖:
bashpip install --upgrade pip pip install numpy -
测试:
bashpython -c "import numpy; print(numpy.__version__)"