有时候在电脑上安装了某个程序的多个版本,比如python,常见的有python3.8和python3.6。在不同情况下需要使用不同版本的软件包,此时就可以使用
update-alternatives
进行切换。本文以配置python
为例,进行讲解。
目录
一. 查看本地安装的所有python版本
(1) 系统路径下安装的版本
使用whereis
或者ls
查看一下。
sun@ubuntu:~$ whereis python
python: /usr/bin/python3.5m
/usr/bin/python3.5
/usr/bin/python2.7
/usr/bin/python
/usr/bin/python3.5m-config
/usr/bin/python3.5-config
/usr/lib/python3.5
/usr/lib/python2.7
/etc/python3.5
/etc/python2.7
/etc/python
/usr/local/lib/python3.5
/usr/local/lib/python2.7
/usr/include/python3.5m
/usr/include/python3.5
/usr/share/python
/usr/share/man/man1/python.1.gz
(2) 通过第三方工具安装的版本
例如使用pyenv安装的python版本,它们都放在了$PYENV_ROOT/versions中。
(3) 其他
二. update-alternatives的使用
1. 将版本加入候选列表中
用法:update-alternatives --install <链接> <名称> <路径> <优先级>
# 添加 python3.8到 python3候选列表
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
# 添加 python3.6到 python3候选列表
sudo update-alternatives --install /usr/bin/python3 python3 /usr/local/src/pyenv/versions/3.6.15/bin/python3.6 2
注: 对于python的候选项设置,需要注意python2.x版本和python3.x版本要区分开,不要将python2.x系列版本配置到python3中,反过来亦是如此,这么配置是没有意义的,因为python程序一般会在程序开头声明用python还是python3解释器。
2. 切换到不同版本
# 1.查看python的候选项
sun@ubuntu:~$ sudo update-alternatives --list python3
/usr/bin/python3.8
/usr/local/src/pyenv/versions/3.6.15/bin/python3.6
# 2.查看当前的python版本
sun@ubuntu:~$ python3 --version
Python 3.6.15
# 3.将 python3.6 切换版本到 python3.8
sun@ubuntu:/root$ sudo update-alternatives --config python3
有 2 个候选项可用于替换 python3 (提供 /usr/bin/python3)。
选择 路径 优先级 状态
------------------------------------------------------------
0 /usr/local/src/pyenv/versions/3.6.15/bin/python3.6 2 自动模式
1 /usr/bin/python3.8 1 手动模式
* 2 /usr/local/src/pyenv/versions/3.6.15/bin/python3.6 2 手动模式
要维持当前值[*]请按<回车键>,或者键入选择的编号:1 #在这里输入编号,回车即可
update-alternatives: 使用 /usr/bin/python3.8 来在手动模式中提供 /usr/bin/python3 (python3)
# 4.再次查看python的当前版本
sun@ubuntu:~$ python3 --version
Python 3.8.10
3. 移除update-alternatives候选项
#update-alternatives --remove 名字 路径
update-alternatives --remove python3 /usr/bin/python3.8
4. 查看update-alternatives都配置了哪些程序
sudo update-alternatives --get-selections
三. update-alternatives切换版本的原理
用 ls -l 命令观察一下执行 update-alternatives --install
前后, /usr/bin/python3 配置前后的变化。
# 配置前
/usr/bin/python3 -> python3.8
# 配置后
/usr/bin/python3 -> /etc/alternatives/python3
这里再观察一下切换版本前后,/etc/alternatives/python3
的变化。
# 切换前
/etc/alternatives/python3 -> /usr/local/src/pyenv/versions/3.6.15/bin/python3.6
# 切换后
/etc/alternatives/python3 -> /usr/bin/python3.8
综上,我们可知 update-alternatives 切换版本的原理就是通过改变软链接地址来实现的。