AlmaLinux 上 Python 3.6 切换到 Python 3.11
在 AlmaLinux 上将默认的 Python 3.6 升级或切换到 Python 3.11 是一个常见的需求。
请注意,直接替换系统自带的 Python 3.6 是非常危险的,因为许多系统工具(如 yum
/dnf
包管理器)都依赖于它,盲目删除或修改可能会导致系统崩溃。
推荐的做法是: 保留系统原有的 Python 3.6,同时安装 Python 3.11,并通过配置 alternatives
工具或使用虚拟环境 (venv
) 来管理默认版本。
以下是两种最安全、最常用的方法。
1. 方法一:使用 Software Collections (SCL) 仓库(推荐且简单)
Red Hat 及其衍生版(如 AlmaLinux)提供了 SCL 仓库,它可以让你安装和维护多个版本的软件而不会影响系统默认版本。
启用 SCL 仓库:
AlmaLinux 可能已经预装了scl
工具。首先安装 SCL 仓库配置。sudo dnf install almalinux-release-scl
安装 Python 3.11:
搜索可用的 Python 版本,然后安装 3.11 及其开发工具包。sudo dnf search rh-python sudo dnf install rh-python311 rh-python311-python-devel
启用 Python 3.11:
安装后,它不会自动成为默认版本。你需要在每次需要时通过scl enable
命令来启动一个包含 Python 3.11 环境的 shell。scl enable rh-python311 bash
现在,在这个新的 shell 中,
python --version
和pip --version
都会指向 3.11。$ python --version
Python 3.11.x
(可选)永久为您的用户启用:
如果您希望每次登录都默认使用 Python 3.11,可以将它添加到您的 shell 配置文件中。echo "source scl_source enable rh-python311" >> ~/.bashrc
然后重新加载配置:
source ~/.bashrc
优点:非常安全,与系统环境完全隔离,管理简单。
缺点:需要额外的命令来启用环境(但可以配置为自动启用)。
2. 方法二:从源码编译安装并配置 alternatives
这种方法更灵活,可以安装任何版本,但步骤稍复杂。
安装编译依赖:
sudo dnf groupinstall "Development Tools" sudo dnf install openssl-devel bzip2-devel libffi-devel sqlite-devel readline-devel
下载并编译 Python 3.11:
# 下载源码包 wget https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tgz # 解压 tar xvf Python-3.11.9.tgz # 进入目录 cd Python-3.11.9 # 配置编译选项(--prefix=/usr/local 是标准位置) ./configure --enable-optimizations --prefix=/usr/local # 编译并安装 (使用 -j 参数加速编译,数字为CPU核心数) sudo make -j 4 sudo make altinstall
重要:使用
make altinstall
而不是make install
,以避免覆盖系统默认的python3
二进制文件。验证安装:
此时,系统会同时存在两个版本:/usr/bin/python3
(系统自带的 3.6)/usr/local/bin/python3.11
(新安装的 3.11)
直接运行
python3.11
和pip3.11
来使用新版本。python3.11 --version
(可选)使用 alternatives 配置默认版本:
如果你想将系统范围的python3
命令指向 3.11(有一定风险,请确保你的关键系统工具不依赖 3.6),可以使用alternatives
工具。# 将 python3.11 加入 alternatives 列表 sudo alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.11 311 # 交互式选择默认版本 sudo alternatives --config python3
运行
sudo alternatives --config python3
后,会列出所有可用的版本,输入对应的选择编号即可切换。警告:执行此操作后,请务必测试
sudo dnf update
等命令是否正常。因为 DNF 是用 Python 写的,如果与新版 Python 不兼容会出错。如果出现问题,只需再次运行sudo alternatives --config python3
并选择回原来的 Python 3.6 即可。
3. 方法三:使用虚拟环境(Venv) - 最安全的方法
这其实不是切换系统版本,而是为每个项目单独指定 Python 版本。这是 Python 开发的最佳实践。
首先,按照方法二安装
python3.11
和pip3.11
。为你的项目创建虚拟环境,并直接指定使用 Python 3.11:
# 直接使用 python3.11 解释器创建虚拟环境 python3.11 -m venv my_project_venv
激活虚拟环境:
source my_project_venv/bin/activate
激活后,命令行提示符会变化,所有
python
和pip
命令都会指向虚拟环境内的 3.11 版本,与系统完全隔离。(my_project_venv) $ python --version
Python 3.11.9
退出虚拟环境:
deactivate
优点:绝对安全,项目之间环境隔离,无任何冲突。
缺点:需要为每个项目单独设置。
4. 总结与建议
方法 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
SCL (方法一) | 安全、简单、官方支持 | 需要手动启用环境 | 大多数情况下的首选,尤其是服务器环境 |
源码编译 (方法二) | 灵活,可安装任意版本 | 步骤复杂,有潜在风险 | 需要高度定制化或特定版本的高级用户 |
虚拟环境 (方法三) | 最安全,项目隔离 | 每个项目都需配置 | Python 开发的最佳实践,强烈推荐 |
最终建议:
<1> 如果你只是想运行一些需要 Python 3.11 的应用或脚本,使用方法一 (SCL)。
<2> 如果你是一名开发者,请务必使用方法三 (虚拟环境) 来管理你的项目,并使用方法二来安装你需要的 Python 版本作为虚拟环境的基础解释器。
<3> 尽量避免使用方法二中的 alternatives
来更改全局 python3
命令,除非非常清楚自己在做什么并且能承担后果。