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。
在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
跟多功能请自行百度。
安装好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
ModuleNotFoundError: No module named ‘yaml’
不要慌,缺什么module我们就安装什么module:
pip install pyyaml
报错:
ModuleNotFoundError: No module named ‘rospkg’
安装:
pip install rospkg
pip install sensor_msgs
……