目录

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,一运行就给你报个错,开心不

https://i-blog.csdnimg.cn/blog_migrate/d59c77b42525111c8dcaa3e66c6118fb.png

我们安装python3的cv2 用命令

pip3 install opencv-python

看了下,也安装成功了

https://i-blog.csdnimg.cn/blog_migrate/61c2345df61e54e339ac0ada5a8a85fb.png

执行,还是报错

打印下 python 的环境变量

https://i-blog.csdnimg.cn/blog_migrate/a90a3a1aeec2e2b44775156369d4402f.png

因为 /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)
# --------------------------

https://i-blog.csdnimg.cn/blog_migrate/65a101180d76cf2dd87850f33120dd99.png

['/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']

打完收工