900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > ROS修改:ubuntu系统更改默认python版本(重要操作)

ROS修改:ubuntu系统更改默认python版本(重要操作)

时间:2022-12-29 16:44:27

相关推荐

ROS修改:ubuntu系统更改默认python版本(重要操作)

ubuntu18.04+ROS melodic

困扰:ROS用到python2,而各种目标检测源码用到python3,而且各种包也要安在python3的环境下,而不是python2.

解决:基于update-alternatives

1.怎么出现的问题

在安装pytorch时发现安装适用于python3.6以上的pytorch版本时出现找不到对应的pytorch版本,而且提示有老的版本,说明在python版本中pip install默认用了python2.*没用python3.*。

rosmelodic@rosmelodic-virtual-machine:~$ pip install torch==1.8.0+cpu torchvision==0.9.0+cpu torchaudio==0.8.0 -f /whl/torch_stable.htmlCollecting torch==1.8.0+cpuCould not find a version that satisfies the requirement torch==1.8.0+cpu (from versions: 0.1.6.post17, 0.1.6.post20, 0.1.6.post22, 0.1.7.post2, 0.1.8.post1, 0.1.9.post1, 0.1.9.post2, 0.1.10.post1, 0.1.10.post2, 0.1.11.post4, 0.1.11.post5, 0.1.12.post1, 0.1.12.post2, 0.2.0.post1, 0.2.0.post2, 0.2.0.post3, 0.3.0, 0.3.0.post2, 0.3.0.post3, 0.3.0.post4, 0.3.1, 0.4.0, 0.4.1, 1.0.0, 1.0.1, 1.0.1.post2, 1.1.0, 1.2.0, 1.2.0+cpu, 1.2.0+cu92, 1.3.0, 1.3.0+cpu, 1.3.0+cu100, 1.3.0+cu92, 1.3.1, 1.3.1+cpu, 1.3.1+cu100, 1.3.1+cu92, 1.4.0, 1.4.0+cpu, 1.4.0+cu100, 1.4.0+cu92, 1.5.0+cpu, 1.5.0+cu92)No matching distribution found for torch==1.8.0+cpu

ubuntu18.04,python版本

rosmelodic@rosmelodic-virtual-machine:~$ pythonPython 2.7.17 (default, Jul 1 , 15:56:32) [GCC 7.5.0] on linux2Type "help", "copyright", "credits" or "license" for more information.>>>

rosmelodic@rosmelodic-virtual-machine:~$ python3Python 3.6.9 (default, Jun 29 , 11:45:57) [GCC 8.4.0] on linuxType "help", "copyright", "credits" or "license" for more information.>>>

ubuntu20.04,python版本

rosnoetic@rosnoetic-virtual-machine:~/桌面$ python找不到命令“python”,您的意思是:command 'python3' from deb python3command 'python' from deb python-is-python3

rosnoetic@rosnoetic-virtual-machine:~/桌面$ python3Python 3.8.10 (default, Jun 22 , 20:18:18) [GCC 9.4.0] on linuxType "help", "copyright", "credits" or "license" for more information.>>>

ubuntu18.04有两种python版本且默认为2.7.17和3.6.9。

ubuntu20.04有仅支持python3,版本为3.8.10。

由于网上大部分源码已经弃用了python2,故想将ubuntu18.04的默认python版本改为python3,将各种包安装在python3下.

2.修改默认python版本(基于update-alternatives

ls /usr/bin/python*

rosmelodic@rosmelodic-virtual-machine:~$ ls /usr/bin/python*/usr/bin/python /usr/bin/python3.6-config/usr/bin/python2 /usr/bin/python3.6m/usr/bin/python2.7 /usr/bin/python3.6m-config/usr/bin/python2.7-config /usr/bin/python3-config/usr/bin/python2-config /usr/bin/python3m/usr/bin/python2-qr /usr/bin/python3m-config/usr/bin/python3 /usr/bin/python-config/usr/bin/python3.6

python2

rosmelodic@rosmelodic-virtual-machine:~$ python2Python 2.7.17 (default, Jul 1 , 15:56:32) [GCC 7.5.0] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> KeyboardInterrupt>>> exit()

python3.6

rosmelodic@rosmelodic-virtual-machine:~$ python3.6Python 3.6.9 (default, Jun 29 , 11:45:57) [GCC 8.4.0] on linuxType "help", "copyright", "credits" or "license" for more information.>>> exit()

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

rosmelodic@rosmelodic-virtual-machine:~$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 1[sudo] rosmelodic 的密码: update-alternatives: 使用 /usr/bin/python3.6 来在自动模式中提供 /usr/bin/python (python)rosmelodic@rosmelodic-virtual-machine:~$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 2update-alternatives: 使用 /usr/bin/python2 来在自动模式中提供 /usr/bin/python (python)

sudo update-alternatives --config python

rosmelodic@rosmelodic-virtual-machine:~$ sudo update-alternatives --config python有 2 个候选项可用于替换 python (提供 /usr/bin/python)。选择 路径 优先级 状态------------------------------------------------------------* 0 /usr/bin/python22 自动模式1 /usr/bin/python22 手动模式2 /usr/bin/python3.6 1 手动模式要维持当前值[*]请按<回车键>,或者键入选择的编号:2update-alternatives: 使用 /usr/bin/python3.6 来在手动模式中提供 /usr/bin/python (python)

rosmelodic@rosmelodic-virtual-machine:~$ pythonPython 3.6.9 (default, Jun 29 , 11:45:57) [GCC 8.4.0] on linuxType "help", "copyright", "credits" or "license" for more information.>>> exit()

修改默认版本成功。

sudo apt install python3-pip

pip install torch==1.8.0+cpu torchvision==0.9.0+cpu torchaudio==0.8.0 -f /whl/torch_stable.html

在安装,成功。

在ROS-melodic中用的是python2,故在安装完各种包时,要把默认的python版本调回来,就是把优先级调一下。不然会报错:

rosmelodic@rosmelodic-virtual-machine:~/catkin_ws/src/yolov5-6.0$ roscoreTraceback (most recent call last):File "/opt/ros/melodic/bin/roscore", line 36, in <module>from rosmaster.master_api import NUM_WORKERSFile "/opt/ros/melodic/lib/python2.7/dist-packages/rosmaster/__init__.py", line 35, in <module>from .main import rosmaster_mainFile "/opt/ros/melodic/lib/python2.7/dist-packages/rosmaster/main.py", line 43, in <module>import rosmaster.masterFile "/opt/ros/melodic/lib/python2.7/dist-packages/rosmaster/master.py", line 47, in <module>import rosmaster.master_apiFile "/opt/ros/melodic/lib/python2.7/dist-packages/rosmaster/master_api.py", line 72, in <module>from rosmaster.util import xmlrpcapiFile "/opt/ros/melodic/lib/python2.7/dist-packages/rosmaster/util.py", line 48, in <module>from defusedxml.xmlrpc import monkey_patchModuleNotFoundError: No module named 'defusedxml'

网上各种删除或者降级python版本,属于杀鸡取卵的方法,如果这么做,刚刚下载的各种pyhon依赖的包因为python版本被破坏而失效,调用这些包的代码也会报错。

灵活的调回来,当需要往python3安装新的包时,再调过去。

sudo update-alternatives --config python

rosmelodic@rosmelodic-virtual-machine:~/catkin_ws/src/yolov5-6.0$ pythonPython 2.7.17 (default, Jul 1 , 15:56:32) [GCC 7.5.0] on linux2Type "help", "copyright", "credits" or "license" for more information.>>>

rosmelodic@rosmelodic-virtual-machine:~/catkin_ws/src/yolov5-6.0$ roscore... logging to /home/rosmelodic/.ros/log/a70de31c-4607-11ed-89a7-000c2969e545/roslaunch-rosmelodic-virtual-machine-19473.logChecking log directory for disk usage. This may take a while.Press Ctrl-C to interruptDone checking log file disk usage. Usage is <1GB.started roslaunch server http://rosmelodic-virtual-machine:46389/ros_comm version 1.14.13SUMMARY========PARAMETERS* /rosdistro: melodic* /rosversion: 1.14.13NODESauto-starting new masterprocess[master]: started with pid [19483]ROS_MASTER_URI=http://rosmelodic-virtual-machine:11311/setting /run_id to a70de31c-4607-11ed-89a7-000c2969e545process[rosout-1]: started with pid [19494]started core service [/rosout]

roscore没问题。

如果要用到刚刚python3搭建的环境,运行的python文件头要加上:

#!/usr/bin/python3

例子:

#!/usr/bin/python3import rospyfrom std_msgs.msg import Int8import argparseimport osimport sysfrom pathlib import Path

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。