• 欢迎访问伊栖物联网社区,聚焦物联网技术和解决方案QQ群:735553309
  • ,从传感器到片上嵌入式系统,无线接入,边缘计算,在这里您可以讨论一切
  • 参加最新的物联网研讨会报名
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏伊栖Eccee

给ubuntu系统指定使用的python版本

软件和平台 wqsj 2年前 (2022-07-10) 1572次浏览 0个评论

Ubuntu有一个update-alternatives命令,对于一些命令或程序,如果有多个版本,可以通过该命令指定优先级并快速切换。以Python为例,在ubuntu下,你可以查看不同版本的路径:

ubuntu@ip-172-31-7-11:~$ whereis python2
python2: /usr/bin/python2 /usr/bin/python2.7 /usr/lib/python2.7 /etc/python2.7 /usr/local/lib/python2.7 /usr/share/man/man1/python2.1.gz
ubuntu@ip-172-31-7-11:~$ whereis python3
python3: /usr/bin/python3 /usr/bin/python3.6m /usr/bin/python3.6 /usr/lib/python3.7 /usr/lib/python3 /usr/lib/python3.6 /usr/lib/python3.8 /etc/python3 /etc/python3.6 /usr/local/lib/python3.6 /usr/share/python3 /usr/share/man/man1/python3.1.gz
ubuntu@ip-172-31-7-11:~$ ls -l /usr/bin/python2
lrwxrwxrwx 1 root root 9 Apr 16  2018 /usr/bin/python2 -> python2.7

可见/usr/bin/pythonN是一个链接文件,指向同一目录下对应的版本号,同样地,系统默认的python也是个链接文件,它的指向决定了该命令运行哪一个版本的ptyhon。

ubuntu@ip-172-31-7-11:~$ which python
/usr/bin/python
ubuntu@ip-172-31-7-11:~$ which python2
/usr/bin/python2
ubuntu@ip-172-31-7-11:~$ which python3
/usr/bin/python3

可见,如果不加版本号,运行python命令,实际上是如/usr/bin/python这个链接文件的指向来决定版本号的。

update-alternatives这个命令的用法f示例如下:

sudo update-alternatives --install /usr/local/bin/python python /usr/bin/python2 20

其中:/usr/local/bin/python是python二进制程序的路径,当然你也可以用系统默认的/usr/bin/python,只不过从linux的用户空间程序角度来看,/usr/local/bin/python更符合规范,我们也顺便看看有什么效果,默认并没有这个路径,而不是/usr/bin/python已经被系统指定了链接路径。而后面的python就是二进制命令或程序本身名称,后面的/usr/bin/python2 20分别指定了版本和优先权。

一、首先查看一下当前ubuntu系统的python相关版本及配置路径:

whereis python

把结果截个图,后面有用。

二、查看当前默认的python版本,直接打python可,用ctrl+D退出

三、 添加python版本的优先级到列表

ubuntu@ip-172-31-7-11:/usr/local/bin$ sudo update-alternatives --install /usr/local/bin/python python /usr/bin/python2 20
update-alternatives: using /usr/bin/python2 to provide /usr/local/bin/python (python) in auto mode
ubuntu@ip-172-31-7-11:/usr/local/bin$ sudo update-alternatives --install /usr/local/bin/python python /usr/bin/python3 40
update-alternatives: using /usr/bin/python3 to provide /usr/local/bin/python (python) in auto mode

当然,你也可以用更多更细的版本来作为python命令所用的版本,无非就是更改上面这优先权之前的那个具体版本路径,
接下来,就可以查询python的各替代命令优先权了

ubuntu@ip-172-31-7-11:/usr/local/bin$ update-alternatives --query python
Name: python
Link: /usr/local/bin/python
Status: auto
Best: /usr/bin/python3
Value: /usr/bin/python3

Alternative: /usr/bin/python2
Priority: 20

Alternative: /usr/bin/python3
Priority: 40

auto就是自动选择优选择高的那个版本,这里best就是优先权为40的这个版本,也就是python3, 我们可以用下面命令验证

ubuntu@ip-172-31-7-11:/usr/local/bin$ which python
/usr/local/bin/python
ubuntu@ip-172-31-7-11:/usr/local/bin$ python
Python 3.6.9 (default, Mar 15 2022, 13:55:28) 
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
按ctrl+D退出pyton命令行

可见,python的优先权已经设置好了,如果平时需要临时更改,如何操作呢?如下所示:

ubuntu@ip-172-31-7-11:/usr/local/bin$ sudo update-alternatives --config python
There are 2 choices for the alternative python (providing /usr/local/bin/python).

  Selection    Path              Priority   Status
------------------------------------------------------------
* 0            /usr/bin/python3   40        auto mode
  1            /usr/bin/python2   20        manual mode
  2            /usr/bin/python3   40        manual mode

Press  to keep the current choice[*], or type selection number: 1  
update-alternatives: using /usr/bin/python2 to provide /usr/local/bin/python (python) in manual mode
ubuntu@ip-172-31-7-11:/usr/local/bin$ python
Python 2.7.17 (default, Mar 18 2022, 13:21:42) 
[GCC 7.5.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.

通过这个update-alternatives命令,我们可以很方便地在python的不同的版本间切换。


ECCEE版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:给ubuntu系统指定使用的python版本
喜欢 (1)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址