由于 /usr/local/bin 优先,update-alternatives 无法工作

由于 /usr/local/bin 优先,update-alternatives 无法工作

我遇到一个问题,当我搜索正确版本的Python我每次都发现蟒蛇3.7

python3 --version
    Python 3.7.0

然后我检查了更新替代方案配置:

sudo update-alternatives --config python3
There are 3 choices for the alternative python3 (providing /usr/bin/python3).

  Selection    Path                                        Priority   Status
------------------------------------------------------------
  0            /usr/local/bin/python3.7                     2         auto mode
  1            /<HOME_DIR>/Software/anaconda3/bin/python3   1         manual mode
* 2            /usr/bin/python3.6                           1         manual mode
  3            /usr/local/bin/python3.7                     2         manual mode

然后我检查了 python3 的位置:

which python3
/usr/local/bin/python3

然后我检查了小路

echo $PATH
/usr/lib/x86_64-linux-gnu/dbus-1.0/include:/usr/local/lib/boost/include:/<HOME_DIR>/bin:/<HOME_DIR>/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/<HOME_DIR>/.dotnet/tools

事实证明python3在 /usr/bin 中搜索之前已在 /usr/local/bin 中找到

为什么更新替代方案是否没有在 /usr/local/bin 中创建链接以维护应用程序的正确搜索?

我不想删除python3来自 /usr/local/bin,但在这种情况下更新替代方案变得毫无用处

如何修复 update-alternatives 也在 /usr/local/bin 中创建链接的问题?

答案1

回答你的第一个问题

为什么 update-alternatives 没有在 /usr/local/bin 中创建链接以维护应用程序的正确搜索?

这只是因为目前配置alternativespython3在中创建符号链接/usr/bin. 从上面的输出来看:

sudo update-alternatives --config python3
There are 3 choices for the alternative python3 (providing /usr/bin/python3).
...

对于任何 Linux 发行版来说,搜索在/usr/本地/bin/usr/bin对于可执行文件,因为这使你可以自由地将任何二进制文件和库放入/usr/本地而不会干扰 dpkg 包。

sudo update-alternatives --config python3对于你的具体问题,从我猜的输出来看在/usr/local/bin/python3是指向/usr/local/bin/python3.7

root@host:~# ls -l /usr/local/bin/python3
lrwxrwxrwx 1 root root 25 Sep 22 15:36 /usr/local/bin/python3 -> /usr/local/bin/python3.7

如果是这种情况,只需删除符号链接在/usr/local/bin/python3你应该没事,因为当调用python3/usr/bin/python3找到,它应该指向/etc/alternatives/python3反过来应该指向所选的二进制文件。
如果在/usr/local/bin/python3不是符号链接,请重命名并进行update-alternatives适当配置。

虽然这可能会暂时拯救你,但下一次更新可能会使你的配置再次变得无用。符号链接/usr/bin/python3随软件包一起提供python3-minimal,并且通过管理此链接与update-alternatives符号链接从python3-minimal软件包的角度来看已断开。此软件包的下一次更新可能会使固定这个问题,但是从 的角度来看,链接已经断开update-alternatives

为了解决这两个问题,最好配置update-alternatives使用在/usr/local/bin/python3作为提供所选版本的符号链接。
为此,以下步骤应该可以解决问题,包括修复/usr/bin/python3关联。

sudo update-alternatives --install /usr/local/bin/python3 python3 /usr/bin/python3.6 2
apt-get install --reinstall python3-minimal

相关内容