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

Posted

技术标签:

【中文标题】如何在 CentOS 上将 Python3.5.2 设置为默认 Python 版本?【英文标题】:How to set Python3.5.2 as default Python version on CentOS? 【发布时间】:2018-01-14 12:15:27 【问题描述】:

有没有办法将 Python 3.5.2 设置为 CentOS 7 上的默认 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, how to set Python2.7 as default Python version?的类似但相反的问题

【问题讨论】:

【参考方案1】:

如果这样

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

不起作用(它应该)

您可以使用以下命令将别名添加到您的 /home/.bashrc

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

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

【讨论】:

你是对的,我尝试了别名,但我正在安装的模块 libtorrent 仍然考虑 Python 2.7。因为 python 2.7 路径还是一样的 无论如何。使用sudo ln -fs /usr/bin/python3 /usr/bin/python 命令,我可以默认使用Python 3.5.2,但我认为Yum 在某种程度上依赖于2.7,所以我不能在Python 3 中使用yum 命令 有人说“我相信 Yum 本身是用 Python 实现的......所以删除 Python 会很好地射击你自己的脚!”在这里评论serverfault.com/questions/844677/… 我建议替代方法 此解决方案正在制造另一个问题。 Yum 仅在 python 2 上工作,将默认 python 更改为 3 会使 yum 崩溃。看看这个***.com/questions/11213520/…【参考方案2】:

我建议改用 alternatives

作为超级用户 (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 pages)

man alternatives

注意:

尽管这个答案是指/使用特定的 Python 版本,alternatives 命令,无论版本号如何,它的概念和用途都保持不变。强烈建议您阅读/了解有关 alternatives 命令的更多信息,以了解它如何帮助您更好地管理和使用您的系统。此外,有些人很有可能会纠正他们机器上当前使用的不良/异常做法。我在我介绍这个概念的绝大多数人中看到了它。这是link to a very good and simple explanation of the alternatives command。

【讨论】:

50 和 60 对替代品有什么作用? 它与选项的“权重”或联机帮助页所说的优先级有关。如果没有手动选择替代方案,则优先级更高。 请记住,如果文件中硬编码了 python 版本,这对您没有任何好处(检查顶部的 shebang...) 这是正确的做法。尽管符号链接“有效”,但它们绕过了替代层,这些替代层为 Java、Python 等提供了重要改进,并提供了多个活动版本。 是否有一个“完整”的解决方案也可以将 python3-devel 包中的标头设为默认值?【参考方案3】:

如题,Linux CentOS 7,如何设置Python3.5.2为默认Python版本?

想补充@OldFart 的答案(不幸的是,我不能评论其他我会的)。

when using the install param with update-alternatives, you can set the priority in auto mode. Implicitly saying that the alternative with the highest priority will be the default alternative should no alternative have been set manually. using the above answer as an 示例,

update-alternatives --install /usr/bin/python python /usr/bin/python2 50

将 python2 替代设置为优先级 50,并且

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

将设置 python3.5 的优先级为 60。 默认情况下,python 3.5 成为 python 命令的默认 python 可执行文件。

如果你想改变你的默认 python 替代品,

update-alternatives --config python

找到更好的方法,因为我不必修改我的路径文件。

【讨论】:

附带说明,'update-alternatives' 是您将在基于 debian 的发行版上使用的内容。 redhat 和相关的“替代品”受到前者的启发,但并不相同。 'update-alternatives' 是 redhat 发行版上的 'alternatives' 的符号链接,我相信它可以帮助平滑从 debian 到 redhat 的服务器管理员等的过渡。我认为将其包含在内会很好,因为 OP 明确指出他使用的是 centos 版本。 是的,你是对的。不得不去搜一搜。感谢您的信息。【参考方案4】:

选项 1) 创建软链接实际上有一个缺点。 “yum”不支持 Python3。所以,如果您仍然决定创建符号链接,那么您还需要更新 /usr/bin/yum

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

并在 /usr/bin/yum 文件中使用 #!/usr/bin/python2 更新 shebang 行

选项 2) 使用替代品

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

选项 3) 在 bash_profile 中创建别名

alias python="/usr/bin/python3"

【讨论】:

【参考方案5】:

我想提供一些关于 yum 在 OP 中被破坏的原因,以及为什么我认为 alternatives 方法是最好的方法。也许还有其他最佳实践,但我已经有了一些发现并想分享我的发现。

假设 3.5.2 是:

    单独安装(由 OP 建议)类似于步骤:Python Installation Procedure From Source ./configure 的 --prefix 选项已从默认的 --prefix = /usr/local/bin 更新为 --prefix = /usr/bin/python3

将 /usr/bin/python3 位置的“单独安装的 3.5.2”链接到 /usr/bin/python 的系统 python 的命令覆盖或以其他方式修改了系统 python,破坏了 yum。

这种方法补充了 @OldFart 的回答,并希望提供一些额外的视角来解释为什么单独安装的 python 会导致问题的根本原因。

update-alternatives 为我遇到的类似问题带来了新鲜空气

【讨论】:

别忘了,'update-alternatives' 是一个基于 Debian 的命令,通常不存在于 Redhat 和相关发行版上。我觉得有必要澄清一下,因为最初的问题清楚地表明 OP 运行的是 CentOS 分布。

以上是关于如何在 CentOS 上将 Python3.5.2 设置为默认 Python 版本?的主要内容,如果未能解决你的问题,请参考以下文章

linux(CentOS)下升级python3.5.2

CentOS6.5源码安装python3.5.2

python3.5.2安装pip管理工具

如何在 centos 上将 dotnetcore 从 1.0.4 版本升级到 2.0.2 版本?

如何在CentOS 6.7上将PHP 5.3升级到PHP 5.6

如何在 centos 上将 subversion(svn) 1.6.11 版本升级到 1.8.5 版本?