Ubuntu16.04 安装了ROS Kinetic之后Python3不能import cv2
据了解在,python中是通过cv2.so调用opencv的库的:
可以看出这个问题是由ROS添加/opt/ros/kinetic/lib/python2.7/dist-packages到python路径引起的。
当使用命令激活ROS时,实际上会发生这种情况source /opt/ros/kinetic/setup.bash。这行通常会添加到bashrc文件的末尾/home/username/.bashrc。
这样就可以正确使用python3 opencv包,你仍然可以运行source /opt/ros/kinetic/setup.bash使用ROS。但是,这确实意味着无法在同一环境中使用ROS和python3
就是说,在用python3运行opencv3 即import cv2的时候需要把.bashrc 或者 .zshrc中的有关ros的soure都注释掉,才可以正常运行
(1)第一种方法
需要在~/.bashrc文件中增加一行命令,操作步骤为:
cd ~
gedit .bashrc或者使用vim .bashrc
部分处理方法是在.bashrc文件中把source /opt/ros/kinetic/setup.bash添加#符号注释掉,但这样势必会造成再次使用ROS时又需要把注释#去掉,这确实意味着无法在同一环境中使用ROS和python3
就是说,在用python3运行opencv3 即import cv2的时候需要把.bashrc 或者 .zshrc中的有关ros的soure都注释掉,才可以正常运行。
因此查找相关的材料可以在打开的.bashrc文件中的最后增加如下一行:
export PYTHONPATH="/home/panda/.local/lib/python3.5/site-packages":$PYTHONPATH
注意:上面的路径中的panda需要换成你自己的用户名
PYTHONPATH后的/home/panda/.local/路径内容需要根据自己的安装路径来来进行更改。但是最后得出的结果可能会和之前提到的那种方法产生一样,即运行ROS时需要注释掉这行代码,运行非ROS时需要加上这行代码。而接下来的第二种方法会在python文件中进行处理。
(2)第二种方法
因为是受ROS安装的影响,ROS安装之后会在python pyth中加入:
'/opt/ros/kinetic/lib/python2.7/dist-packages'
而为了解决此问题,可以在需要运行的python文件(即使用import cv2的python文件)中,添加以下代码:
import sys
sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')
通过这两行代码可以把ROS写入path中的路径给清除,进行可以import anaconda中的cv2包。
注:通过此方法再次import cv2时,问题得以解决,不再报错,但此方法并不一定可以保证在所有的情况下都适用,但还是值得一试滴。
(3) 第三种方法
给cv2.so改个名字
cd /opt/ros/kinetic/lib/python2.7/dist-packages/
sudo mv cv2.so cv2_ros.so
没有尝试过