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 装,传送门https://www.jianshu.com/p/5f60d11a1a86 太慢了,太费事
  • 代码里加一段,调整下位置就行了, 我把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']

打完收工

发布了65 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_36628778/article/details/103735374