如何在CentOS 7中将RPM默认Python模块配置修改为Python3
核心原因说明
你配置的alternatives仅调整命令行调用python时的默认执行路径,和RPM包数据库的元数据完全无关。rpm -q --provides python返回的是系统预装的python-2.7.5 RPM包的内置声明信息,你手动编译安装的Python3.6没有注册到RPM数据库,自然不会被RPM识别。
实现需求的操作步骤
如果你需要让rpm -q --provides python返回Python3.6的相关信息,可以通过构建一个虚拟RPM包替换系统的python虚包实现,操作如下:
- 安装RPM构建工具
yum install -y rpm-build
- 新建虚拟包SPEC配置文件
python3.6-virtual.spec,内容如下:
Name: python Version: 3.6 Release: 1.el7 Summary: Virtual package for Python 3.6 default License: GPL Provides: python = 3.6 Provides: python(abi) = 3.6 Provides: Distutils # 你可以按需添加其他需要声明的Provides字段 Obsoletes: python < 3.6 BuildArch: noarch %description Virtual RPM package to register Python 3.6 as default python version in RPM database. %files
- 构建虚拟RPM包
rpmbuild -bb python3.6-virtual.spec
- 强制安装构建好的虚拟包
rpm -ivh --force /root/rpmbuild/RPMS/noarch/python-3.6-1.el7.noarch.rpm
操作完成后再次执行rpm -q --provides python就会返回你期望的3.6版本相关输出。
注意事项
- 该操作仅修改RPM数据库的元数据声明,不会删除或修改系统内置的Python2.7文件,依赖Python2.7的系统工具(如yum)可以正常运行,不会导致系统故障
- 绝对不要直接卸载系统内置的
python-2.7RPM包,会直接导致yum等核心系统工具不可用 - 后续如果需要通过RPM安装官方Python3相关包,建议先卸载该虚拟包避免依赖冲突
内容的提问来源于stack exchange,提问作者4Register Tony
相关产品推荐
相关产品推荐

