ubuntu20.04 ROS不能运行(Python版本问题)

报错

最近在使用ROS noetic时,在正确安装ROS完全版的情况下,仍然无法正常使用,运行roscore,主要报错如下:

❯ roscore
Traceback (most recent call last):
  File "/opt/ros/noetic/bin/roscore", line 37, in <module>
    from roslaunch.nodeprocess import DEFAULT_TIMEOUT_SIGINT, DEFAULT_TIMEOUT_SIGTERM
  File "/opt/ros/noetic/lib/python3/dist-packages/roslaunch/__init__.py", line 57, in <module>
    from .launch import ROSLaunchRunner
  File "/opt/ros/noetic/lib/python3/dist-packages/roslaunch/launch.py", line 58, in <module>
    from roslaunch.rlutil import update_terminal_name
  File "/opt/ros/noetic/lib/python3/dist-packages/roslaunch/rlutil.py", line 47, in <module>
    import rosclean
  File "/opt/ros/noetic/lib/python3/dist-packages/rosclean/__init__.py", line 40, in <module>
    from distutils.spawn import find_executable
ModuleNotFoundError: No module named 'distutils.spawn'

原因分析

显示是python的问题,按照网上的办法,安装distutils

sudo apt-get install python3-distutils

安装成功后,但仍然报错。通过查找,发现它安装在了/usr/lib/python3/dist-packages/目录下,并不是/opt/ros/noetic/lib/python3/dist-packages,但我们在导入模块的时候,python会在指定的路径下搜索相对应的.py文件,搜索路径存放在sys模块的sys.path变量中:
请添加图片描述按照上面的命令获取python的搜索路径,显然/usr/lib/python3/dist-packages/是在其中,那为什么ROS的相关包搜索不到呢?

解决方案

查了大量的解决方案,常见的解决是修改默认python,修改软链接,通过下列命令查询python默认版本

python --version

请添加图片描述说明默认使用的python是3.6,这个在安装系统时自带了,但是通过上面的查询,我之前是安装了python3.8,但/usr/lib/python3/dist-packages/下面的包只有3.8可以调用(经过反复验证得出),很奇怪。
那就按照网上的办法更改软链接:

update-alternatives  # 列出python替代版本信息

但可能报错,表示Python的替代尚未被 update-alternatives 命令识别,这时候我们需要更新一下替代列表:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6  1
 
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8  2

–install 选项使用了多个参数用于创建符号链接。最后一个参数指定了此选项的优先级,如果我们没有手动来设置替代选项,那么具有最高优先级的选项就会被选中。这个例子中,我们为 /usr/bin/python3.8 设置的优先级为2,所以update-alternatives 命令会自动将它设置为默认 Python 版本。
可以通过

sudo update-alternatives --config python

来手动修改优先级。再次输入python,查看当前python版本:
请添加图片描述成功修改为3.8。运行roscore,结果仍然报错。。。没有解决。

后来经过一番努力,发现我默认使用的python3版本是3.6:
请添加图片描述原来上面的修改是修改了Python的默认版本为3.8,这里的python是可以包括python2.x和python3.x的。但是python3的默认版本还是系统自带的3.6,而ROS noetic版本默认采用的是python3,因此实际还是调用python3.6,所以按照上面的方法设置优先级

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6  1
 
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8  2

或者通过

sudo update-alternatives --config python3

来手动修改优先级。

这样,再输入python3,默认就是3.8了:
请添加图片描述再输入roscore,没有问题,输入小乌龟的demo也没问题:

roslaunch turtle_tf turtle_tf_demo.launch

请添加图片描述

总结

要修改python3的默认版本,sudo update-alternatives --config python是不行的,需要sudo update-alternatives --config python3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jenkinwey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值