Ubuntu16.04:完美解决如何用python3.6运行ros的问题

问题描述:

​ ros里的许多包只支持python2.7,所以下载ros时自带的python版本也是2.7的。但是,尴尬的是,当我们想用pyqt5编辑gui界面时,pyqt5只支持python3。网上建议的在python2中用pip install python-qt5的指令我也试过了,实测会报错,并下载不了。

​ 这里采取的方法是先在程序中import进python2.7才有的ros库(如rospy),然后删除python2.7的路径,用python3来import cv2和pyqt5。

解决办法:

  1. 在ubuntu中安装pyenv,管理不同的python版本

    (1)打开终端,执行git clone git://github.com/yyuu/pyenv.git .pyenv

    (2)配置环境,依次输入:

    echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc

    echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc

    echo 'eval "$(pyenv init -)"' >> ~/.bashrc

    (3)利用pyenv安装python 3.6.1

    pyenv install 3.6.1(具体版本根据自己的需要)

    (4)常用代码

    切换python版本:

    pyenv global 3.6.1

    要切回系统自带的python2.7的话执行:

    pyenv global system

    如果要查看pyenv中已安装的各个python版本:

    pyenv versions

    跟多功能请自行百度。

  2. 安装好python3.6后,利用pyenv global 3.6.1切换到python3.6版本,这时候如果直接运行含有

    import cv2

    import rospy

    import from sensor_msgs.msg import Image

    各种同时涉及cv2和rospy库的py文件时,是会报错的:(如下)

    import cv2
    ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type

    所以调整一下import的顺序:

    import os

    import sys

    import rospy

    from sensor_msgs.msg import Image

    from cv_bridge import CvBridge, CvBridgeError

    from geometry_msgs.msg import Twist

    ##先把python2.7特有的ros包import了

    sys.path.remove(’/opt/ros/kinetic/lib/python2.7/dist-packages’)

    ##把python2.7从python路径中踢掉

    import cv2

    ##这时候将从python3中import cv2啦

    import numpy as np

    import shutil

    1. 调整好import的顺序后,再试着运行一下py文件。如果还是报错,例如:

    ModuleNotFoundError: No module named ‘yaml’

    不要慌,缺什么module我们就安装什么module:

    pip install pyyaml

    报错:

    ModuleNotFoundError: No module named ‘rospkg’

    安装:

    pip install rospkg

    pip install sensor_msgs

    ……

    1. 再执行一次py文件,就可以用python3.6运行含rospy的程序啦~

你可能感兴趣的:(ros,python)