ros-自带-python2-的-opencv-和-python3.5-安装的-python3-的opencv-冲突-报-undefined-symbol-PyCObject_Type-问题解决
目录
ros 自带 python2 的 opencv 和 python3.5 安装的 python3 的opencv 冲突 报 undefined symbol: PyCObject_Type 问题解决
当我们 想用python3的opencv, 自己又装了ros,一运行就给你报个错,开心不
我们安装python3的cv2 用命令
pip3 install opencv-python
看了下,也安装成功了
执行,还是报错
打印下 python 的环境变量
因为
/opt/ros/kinetic/lib/python2.7/dist-packages
这个路径 在
/home/utry/.local/lib/python3.5/site-packages
之前,按照字母排序的,这个导入模块的时候,每次都会先到`/opt/ros/kinetic/lib/python2.7/dist-packages 这里导入,这是因为在安装ros的时候添加的环境变量
有三个解决方案
- 有个很浪的方案,就是把ros自带的cv2 给删除掉,一劳永逸, 不能删除那个环境变量,不然ros会有大问题
- 删掉ros 用 python3 装,传送门 太慢了,太费事
- 代码里加一段,调整下位置就行了, 我把python3.5 的环境变量整最前面去了
import sys
# ----------------------
# 消除ros自带opencv 对环境的影响,自带的是2.7 我们用的3.5
print(sys.path)
list_path = sys.path # type:list
for index in list_path:
if '.local/lib/python3.5/site-packages' in index:
list_path.remove(index)
list_path.insert(0, index)
break
print(sys.path)
# --------------------------
['/home/utry/simple', '/home/utry/catkin_ws/devel/lib/python2.7/dist-packages', '/opt/ros/kinetic/lib/python2.7/dist-packages', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/home/utry/.local/lib/python3.5/site-packages', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages']
['/home/utry/.local/lib/python3.5/site-packages', '/home/utry/simple', '/home/utry/catkin_ws/devel/lib/python2.7/dist-packages', '/opt/ros/kinetic/lib/python2.7/dist-packages', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages']
打完收工