如何在CentOS上将Python3.5.2设置为默认的Python版本?

54
在CentOS 7上有没有一种方法可以将Python 3.5.2设置为默认的Python版本?目前,我安装了默认的Python 2.7和单独安装的Python 3.5.2。
我使用了以下命令
mv /usr/bin/python /usr/bin/python-old
sudo ln -fs /usr/bin/python3 /usr/bin/python

但是之后yum会出现错误。

-bash: /usr/bin/yum: /usr/bin/python: bad interpreter: No such file or directory

我是否漏掉了什么重要的信息?

注:这与Linux CentOS 7如何将Python2.7设置为默认的Python版本?类似但正好相反。

6个回答

97

如果这个

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

无法正常工作(本应如此)

您可以通过以下命令将别名添加到您的/home/.bashrc中:

alias python="/usr/bin/python3.5"

如果这也不起作用,您应该使用虚拟环境。阅读此页面以开始。


1
你是对的,我尝试了别名,但我正在安装的模块libtorrent仍然考虑Python 2.7,因为Python 2.7路径仍然相同。 - Muaaz Khalid
1
无论如何,使用sudo ln -fs /usr/bin/python3 /usr/bin/python命令,我能够将Python 3.5.2作为默认版本使用,但我认为Yum在某种程度上依赖于2.7版本,因此我不能使用Python 3来执行yum命令。 - Muaaz Khalid
2
在这个评论中,有人说:“我相信Yum本身是用Python实现的...所以删除Python会很自毁前程!” https://serverfault.com/questions/844677/server-wiped-after-yum-remove-python - Muaaz Khalid
2
我建议使用替代方法。 - OldFart
1
这个解决方案正在产生另一个问题。Yum仅适用于Python 2,将默认的Python更改为3会导致yum崩溃。请查看https://dev59.com/iGgu5IYBdhLWcg3wloG_ - edisonthk
显示剩余6条评论

81

我建议使用替代方案

作为超级用户(root),运行以下命令:

# Start by registering python2 as an alternative
alternatives --install /usr/bin/python python /usr/bin/python2 50

# Register python3.5 as an alternative
alternatives --install /usr/bin/python python /usr/bin/python3.5 60

# Select which Python version to use
alternatives --config python

最后的命令将要求您在注册/安装的替代方案之间进行选择。

通常情况下,您可以使用以下简单命令查看手册(Linux man页面)。

man alternatives

注:

尽管这个答案涉及/使用了特定的Python版本和alternatives命令,但是其概念和用法不受版本号的限制。强烈建议您阅读/学习有关alternatives命令的更多信息,以便了解如何更好地管理和使用系统。此外,很有可能会纠正当前在他们的计算机上使用的错误/不寻常做法。我发现大多数人都能理解这个概念。这里有一个链接提供了一个非常好的和简单的alternatives命令的解释。


1
50 和 60 在 alternatives 中有什么作用? - Chris Marotta
2
这与选项的“权重”或优先级有关,正如manpages所说。如果没有手动选择替代方案,则较高的优先级将优先考虑。 - OldFart
1
请记住,如果Python版本在文件中硬编码(检查顶部的shebang...),那么这对您没有任何好处。 - OldFart
1
这是正确的方法。虽然符号链接“可以工作”,但它们绕过了替代层,这些替代层为具有多个可用活动版本的Java、Python等提供重要改进。 - Brad Hein
有没有“完整”的解决方案,可以使python3-devel包中的头文件成为默认值? - HCSF
显示剩余4条评论

10

选项1)创建软链接实际上有一个缺点。 "yum" 不支持 Python3。因此,如果您仍然决定使用符号链接创建,则还需要更新 /usr/bin/yum。

ln -s /usr/bin/python3 /usr/bin/python

选项1)更新/usr/bin/yum文件中的shebang行为#!/usr/bin/python2

选项2)使用alternatives

alternatives --install /usr/bin/python python /usr/bin/python3.x 60
alternatives --config python 

选项3)在bash_profile中创建别名

alias python="/usr/bin/python3"

5
作为这个问题的回答,如何将Python3.5.2设置为Linux CentOS 7的默认Python版本?
我想要补充@OldFart的答案(不幸的是,无法评论,否则我会的)。 当使用update-alternatives命令的install参数时,可以在自动模式下设置优先级。隐含地说,如果没有手动设置替代方案,则具有最高优先级的替代方案将成为默认替代方案。使用上述答案作为示例。
update-alternatives --install /usr/bin/python python /usr/bin/python2 50

将以50的优先级设置Python2的替代方案,并且

update-alternatives --install /usr/bin/python python /usr/bin/python3.5 60

将设置Python 3.5为60的优先级。默认情况下,Python 3.5成为Python命令的默认可执行文件。如果您想更改默认的Python替代方案,
update-alternatives --config python

我认为这是更好的方法,因为我不需要修改我的路径文件。

4
顺便提一下,在基于Debian的发行版中,您需要使用“update-alternatives”命令。RedHat及相关的“alternatives”命令受此启发,但并不完全相同。在RedHat发行版上,“update-alternatives”是指向“alternatives”的符号链接,这可以帮助服务器管理员等平稳地从Debian转换到RedHat。考虑到OP明确说明他正在使用CentOS,因此将此信息包含进来会很有用。 - OldFart
是的,你说得对。我不得不搜索一下。谢谢你提供的信息。 - yonga springfield

2

使用 alternatives 设置默认为 python3.6 仍会破坏 yum。为了修复问题,在两个文件中将 python 解释器更改为 /usr/bin/python2.7

[root@centos7 ~]# cat /usr/bin/yum
#!/usr/bin/python2.7
[root@centos7 ~]# cat /usr/libexec/urlgrabber-ext-down
#!/usr/bin/python2.7

我发现以下文章很有用:https://rakeshjain-devops.medium.com/how-to-install-python-3-on-centos-7-7-using-yum-and-source-and-set-as-default-1dee13396f7。该文章介绍了如何在CentOS 7.7上使用yum和源码安装Python 3,并设置为默认版本。

1
我想提供一些额外的背景信息来解释为什么 OP 中的 yum 被破坏,以及为什么我认为 'alternatives' 方法是最佳方法。也许还有其他最佳实践,但我已经发现了一些内容,并希望分享我的发现。
假设 3.5.2 是:
1. 分别安装的(按照 OP 建议),类似于步骤:Python Installation Procedure From Source 2. --prefix 选项更新为 ./configure 的默认值 --prefix = /usr/local/bin 到 --prefix = /usr/bin/python3
将 '独立安装的 3.5.2' 链接到位于 /usr/bin/python 的系统 python,覆盖或修改了系统 python,破坏了 yum。
这种方法补充了 @OldFart 的答案,希望提供一些额外的视角,从而解释分别安装 python 可能会导致问题的根本原因。
'update-alternatives' 对于我遇到的类似问题带来了一丝清新之风。

不要忘记,“update-alternatives”是一个基于Debian的命令,通常不会出现在Redhat和相关的发行版中。我觉得有必要澄清一下,因为原始问题明确指出OP运行的是CentOS发行版。 - OldFart

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