如何修复 -- bash: /usr/bin/python: Too many levels of symbolic links

7

我想将python3设置为我的rhel默认版本,所以我按照以下步骤操作:如何在CentOS上设置Python3.5.2为默认Python版本?

sudo ln -fs /usr/bin/python3 /usr/bin/python

它将默认值更改为3.6.8
root@rhel:~# python -V
Python 3.6.8

然后我尝试了yum安装python-pip:
root@rhel:~# yum install python-pip
  File "/usr/bin/yum", line 30
    except KeyboardInterrupt, e:
                        ^
SyntaxError: invalid syntax

当我尝试了其他几个命令后,出现了这种情况。我尝试通过

撤销更改
root@rhel:~# sudo ln -fs /usr/bin/python /usr/bin/python

但是我遇到了问题

root@rhel:~# python -V
bash: /usr/bin/python: Too many levels of symbolic links

我猜从我在一些地方读到的内容来看,我需要打破符号链接。以下是我 /usr/bin/ 中的内容:

enter image description here

运行 ls -l /usr/bin | grep python 命令。

lrwxrwxrwx    1 root root          15 Oct 21 14:12 python -> /usr/bin/python
lrwxrwxrwx    1 root root          14 Aug  8 05:53 python-config -> python2-config
lrwxrwxrwx    1 root root           9 Aug  8 05:51 python2 -> python2.7
lrwxrwxrwx    1 root root          16 Aug  8 05:53 python2-config -> python2.7-config
-rwxr-xr-x    1 root root        7144 Jun 11 10:34 python2.7
-rwxr-xr-x    1 root root        1835 Jun 11 10:34 python2.7-config
lrwxrwxrwx    1 root root           9 Aug  8 05:51 python3 -> python3.6
lrwxrwxrwx    1 root root          16 Aug  8 05:53 python3-config -> python3.6-config
lrwxrwxrwx    1 root root          20 Aug  8 05:53 python3-debug -> /usr/bin/python3.6dm
-rwxr-xr-x    2 root root       11336 Jun 11 15:17 python3.6
lrwxrwxrwx    1 root root          17 Aug  8 05:53 python3.6-config -> python3.6m-config
-rwxr-xr-x    1 root root       11336 Jun 11 15:17 python3.6dm
-rwxr-xr-x    1 root root         175 Jun 11 15:16 python3.6dm-config
-rwxr-xr-x    1 root root        3396 Jun 11 14:54 python3.6dm-x86_64-config
-rwxr-xr-x    2 root root       11336 Jun 11 15:17 python3.6m
-rwxr-xr-x    1 root root         173 Jun 11 15:16 python3.6m-config
-rwxr-xr-x    1 root root        3403 Jun 11 14:54 python3.6m-x86_64-config

1
ls -l /usr/bin | grep python 显示什么? - LampToast
一堆!我把结果放在我的问题底部 @LampToast - sectechguy
2
ln -fs /usr/bin/python /usr/bin/python/usr/bin/python 变成了一个指向自身的符号链接,从而创建了一个无限循环的符号链接。你应该将 /usr/bin/python 指向其他的符号链接之一。 - jamesdlin
4个回答

7

这行结果的内容

lrwxrwxrwx    1 root root          15 Oct 21 14:12 python -> /usr/bin/python

这告诉我们符号链接 python 指向了它本身,这导致了"Too many levels"的错误。

您可以通过以下方式删除该链接:

rm python

或者使用以下命令重置python3链接:
ln -fs /usr/bin/python3 /usr/bin/python

(这两个命令都可能需要sudo权限)

yum安装错误是一个独立的问题,不过。


感谢您抽出时间来解释这个问题。回到Python3,输入python -V即可查看版本号:Python 3.6.8。 - sectechguy

2
"

ln -fs /usr/bin/python /usr/bin/python会创建一个递归符号链接,即它指向自身。

yum似乎是用Python 2语法编写的,因此请将该符号链接恢复为原始状态:

"
sudo ln -fs python2 /usr/bin/python

然后找到一种方法使Python 3成为默认版本,而不会破坏软件包管理器。例如,使用别名
请参阅PEP 394以了解保持Python 2为默认版本的原因。
附言:我不熟悉RHEL,但这些都符合我的Ubuntu经验。

0

我在解决符号链接/usr/bin/python后运行yum时遇到了类似的输出问题(收到以下错误):

File "/usr/bin/yum", line 30
    except KeyboardInterrupt, e:
                        ^
SyntaxError: invalid syntax

LampToastwjandrea提供的解决方案帮助我解决了符号链接问题。虽然我注意到我必须链接python2而不是python3.x,但一旦我这样做了,yum就开始正常工作了。此外,如果您使用软件包替代方案符号链接到它们的位置可能需要更改。我只是将它们全部删除了,因为我不需要它们在我的环境中。

按照以下步骤进行:

  1. 返回位于/usr/bin中的python软件包-包括符号链接
root@rhel:~# sudo ls -l /usr/bin | grep python

  1. /usr/bin中删除python
root@rhel:~# sudo rm python

  1. 应用符号链接到 /usr/bin/python,针对于 python2
root@rhel:~# sudo ln -fs /usr/bin/python2 /usr/bin/python

  1. 验证 Python 版本 - 验证软件包无法识别的问题是否已解决
root@rhel:~# sudo python -V

  1. 安装 yum-utils 以验证其他缺失的软件包
root@rhel:~# sudo yum -y install yum-utils.noarch yum-verify

  1. 确定缺失的二进制文件 - 执行此检查以验证不存在已知问题。 (通常是您收到的问题的情况)
root@rhel:~# sudo yum verify --verify-filenames='*bin/*'

  1. 前一个命令的输出将显示缺失的二进制文件,只需使用以下命令重新安装即可
root@rhel:~# sudo yum -y reinstall package_name

注意:您可以再次执行第6步,以确保不存在已知问题。

我本来打算建议开启新的线程,以便在需要进一步排除故障时提供帮助。然而,我决定修改我的答案并分享我刚刚通过自己遇到这个问题所获得的知识。


0

我退出了root账户(按下ctrl+D),它起作用了。


1
目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接