ROS兼容python2和python3同时使用


系统版本:ubuntu16.04

更新python3.5到python3.7

下载

wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1rc2.tgz

解压

tar zxvf Python-3.7.1rc2.tgz
cd Python-3.7.1rc2

编译

./configure
sudo make
sudo make install

先找的python3.7解释器位置,一般是
/usr/local/bin/python3.7

删除原来的软连接

rm -rf /usr/bin/python3
rm -rf /usr/bin/pip3

添加python3的软链接

ln -s /usr/local/bin/python3.7 /usr/bin/python3
#添加 pip3 的软链接
ln -s /usr/local/bin/pip3.7 /usr/bin/pip3

问题备忘

问题一: 报错ModuleNotFoundError: No module named ‘_ctypes’
解决办法

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get install build-essential python-dev python-setuptools python-pip python-smbus
sudo apt-get install build-essential libncursesw5-dev libgdbm-dev libc6-dev
sudo apt-get install zlib1g-dev libsqlite3-dev tk-dev
sudo apt-get install libssl-dev openssl
sudo apt-get install libffi-dev

问题二: zipimport.ZipImportError: can’t decompress data; zlib not available

解决方法 sudo apt-get install zlib

问题三: 出现locations that require TLS/SSL异常处理方法

 sudo apt-get install gcc libffi-devel zlib* openssl-devel

然后重新编辑和安装python7即可

创建虚拟环境,可以运行python3的同时兼容python2

以下内容在Ubuntu 16.04 x64和ROS kinetic中测试通过
事实上,只要在.py文件加上python3的shebang,rosrun的时候就会自动调用相应的解释器了:

#!/usr/bin/env python3

但是,在安装ros-kinetic-desktop-full的时候,也并没有安装python3相关的package,所以需要手动安装。

创建virtualenv环境

sudo pip install virtualenv
# 我在这使用的是Python3.6rc2,指向系统已安装的python3也可以。
virtualenv -p /usr/bin/python3 venv
source venv/bin/activate
python -V
# Python 3.6.0rc2

virtualenv -p /usr/bin/python3 venv
这个命令建立了一个venv文件夹,把他放到ROS工作空间去,用的时候source一下就可以了
如下图所示
在这里插入图片描述
问题:执行上面的命令是可能会遇到的问题
问题一:python ModuleNotFoundError : ‘CommandNotFound’
解决办法入下:

Check /usr/lib/command-not-found file, it is trying to find module
CommandNotFound, which is NOT shipped with python3.7 but DOES with
Ubuntu under directory /usr/lib/python3/dist-packages. What we need to
do is adding the directory to python import path:
vi .bashrc (or .profile) add line
export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.7/site-packages:/usr/lib/python3/dist-packages
Pay attention that you may need to change the
/usr/local/lib/python3.7/site-packages to your own directory.
exit
and source .bashrc (or .profile)

问题二:No module named’lsb_release’
解决入下:

python3.7安装后提示
No module named’lsb_release’
修改/usr/bin/lsb_release
#!/usr/bin/python3.5m -ES

NOTE

source ros_test/devel/setup.zsh
# 如没有使用virtualenv,下一语句则跳过
source rosenv/bin/activate
rosrun py3test pytest.py//-如果要兼容python2,此语句不要执行

需要注意的是,即使使用的virtualenv中,python指向的是python3,但是只要不在.py文件中添加python3的shebang,rosrun还是会调用python2的。这样可以很方便地兼容原来Python2的Package。

  • 6
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值