Ubuntu

Python符號連結混淆了

  • May 26, 2021

使用 Ubuntu 16.04

嘗試將 python 3.6 設置為python3命令的預設值。我找到了似乎是答案,並在沒有仔細閱讀的情況下快速複製粘貼了以下幾行:

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 1
update-alternatives: using /usr/bin/python3.6 to provide /usr/bin/python (python) in auto mode
$ sudo update-alternatives  --set python /usr/bin/python3.6

這是結果:

$ python3
Python 3.5.2 (default, Nov 12 2018, 13:43:14)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
$ python
Python 3.6.8 (default, Dec 24 2018, 19:24:27)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.python

我的一個朋友試圖這樣設置它:

$ sudo update-alternatives --install /usr/bin/python3.6 python /usr/bin/python 1
update-alternatives: renaming python link from /usr/bin/python to /usr/bin/python3.6

結果是這樣的:

$ python
zsh: command not found: python

現在任何與 python 3.6 連結的東西都會得到錯誤“符號連結的級別太多”,就像在這個例子中一樣:

$ sudo update-alternatives --config python
update-alternatives: warning: alternative /usr/bin/python (part of link group python) doesn't exist; removing from list of alternatives
update-alternatives: error: cannot stat file '/usr/bin/python3.6': Too many levels of symbolic links

最大的問題是,如果您像我朋友那樣關閉終端,那麼終端應用程序將停止一起工作。他現在必須重新安裝 Ubuntu。我處於同樣的情況,只是我仍然沒有關閉我的終端並且(目前)一切正常。

如何反轉符號連結?

Python 包不使用替代方案;恢復工作設置:

sudo update-alternatives --remove-all python
cd /usr/bin
sudo ln -sf python2.7 python
sudo ln -sf python3.5 python3

您可能需要重新安裝 Python 3.6 包,因為您似乎已經覆蓋了python3.6二進製文件。

首先斷開損壞的連結。

unlink /usr/bin/python2.7

然後使用 sudo update-alternatives 進行配置

sudo update-alternatives --config python

之後重新執行您想要的命令

引用自:https://unix.stackexchange.com/questions/511510