Linux系列讲解 —— 【update-alternatives】本地软件版本管理工具(以配置python为例)

有时候在电脑上安装了某个程序的多个版本,比如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 切换版本的原理就是通过改变软链接地址来实现的。

当你使用`sudo update-alternatives --config python`命令尝试切换Python版本时,如果无法成功,可能有以下几种情况: 1. `update-alternatives`服务没有正确配置:可能是因为`update-alternatives`系统没有为Python设置好替代方案。你可以使用`update-alternatives --list python`来查看当前系统中所有已配置Python版本。 2. 权限不足:使用`sudo`是为了获取管理员权限,但是有时可能因为一些系统策略或其他原因,即便使用了`sudo`,命令也无法执行。检查系统是否有特别的配置或者策略限制了管理员的某些操作。 3. 环境变量问题:在某些情况下,可能系统环境变量没有正确设置,导致无法识别`python`命令。可以检查系统的PATH环境变量,确保它包含了正确版本Python的可执行文件路径。 为了解决这些问题,可以尝试以下步骤: 1. 确认`update-alternatives`服务已经为Python配置了多个版本。可以使用以下命令查看: ``` sudo update-alternatives --list python ``` 2. 检查当前链接到的Python版本,可以使用以下命令查看: ``` sudo update-alternatives --display python ``` 3. 如果确认了多个版本配置正确,但是仍然不能切换,可以尝试重新配置`update-alternatives`服务。使用以下命令重新设置Python的优先级: ``` sudo update-alternatives --config python ``` 4. 确保系统环境变量PATH包含了你希望使用的Python版本的路径。可以在`~/.bashrc`、`~/.profile`或者`/etc/profile`中添加相应的路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

星际工程师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值