You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写可同时适配RHEL7、RHEL8的Python程序RPM spec文件

问题1:依赖条件判断方案有效性

你当前编写的条件判断逻辑完全适用于RHEL7和RHEL8的适配场景:

  • 0%{?rhel}的写法可以规避%rhel宏未定义时的语法报错,RHEL7的%rhel值为7,RHEL8的%rhel值为8,判断分支可以正确命中
  • RHEL7官方源中的Python2依赖包确实使用无版本前缀命名,RHEL8默认取消Python2支持,所有Python3依赖包均带python3-前缀,依赖声明完全符合两个版本的官方包命名规则
问题2:%__python宏报错解决方案

RHEL8开始默认移除了无版本指向的%__python宏定义,需要在条件分支中主动声明该宏的指向,无需修改后续%build、%install阶段的代码即可完成适配。

适配后的完整spec片段

# 前置版本判断:统一宏定义+依赖声明
%if 0%{?rhel} <= 7
# 重定义__python指向Python2
%define __python %{__python2}
### 运行依赖 ###
Requires: python python-jinja2 python-markupsafe python-sqlalchemy
### 构建依赖 ###
BuildRequires: python-setuptools
%else 
# 重定义__python指向Python3
%define __python %{__python3}
### 运行依赖 ###
Requires: python3 python3-jinja2 python3-markupsafe python3-sqlalchemy
### 构建依赖 ###
BuildRequires: python3-setuptools
%endif

# 后续构建、安装逻辑无需修改
%build
%{__python} setup.py build

%install
%{__python} setup.py install --skip-build --root $RPM_BUILD_ROOT

额外注意事项

  • 需分别在RHEL7、RHEL8的原生构建环境中生成对应版本的RPM包,不可跨版本构建
  • 如果你的自研程序已经完成Python3全适配,也可以将RHEL7分支的依赖统一改为python3-前缀的包,实现两个版本运行环境的Python版本统一

内容的提问来源于stack exchange,提问作者danidar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:45:00