RHEL8构建Python RPM包时shebang被改写为platform-python该如何处理
解决方案
方案1:完全禁用shebang改写,保留原有设置
你之前配置不生效的原因是%py3_install宏自带独立的shebang修复逻辑,仅禁用brp规则不生效,需要在spec文件最开头新增两行配置:
%undefine __brp_mangle_shebangs %undefine __python3_shebang_fix
配置完成后重新构建即可保留你原始脚本中的#!/usr/bin/python3不变。
方案2:指定shebang为/usr/bin/python3,不关闭改写逻辑
如果你希望保留系统的其他打包校验规则,仅指定shebang的Python路径,在spec开头添加以下配置即可:
%define __python3 /usr/bin/python3 %undefine __python_shebang_clamp
该配置会让改写逻辑直接使用/usr/bin/python3作为shebang路径,不会限制到具体的3.6小版本,兼容所有Python3.6+环境。
兜底方案:安装阶段手动强制修改
如果上述配置仍不生效,可在%install阶段的%py3_install后添加手动替换逻辑:
%install %py3_install # 手动替换所有Python脚本的shebang find %{buildroot} -type f -name "*.py" -executable | xargs sed -i '1s|^#!.*python.*|#!/usr/bin/python3|'
该方法会强制把所有可执行Python脚本的首行shebang替换为目标路径,优先级最高不会被其他规则覆盖。
内容的提问来源于stack exchange,提问作者danidar
相关产品推荐
相关产品推荐

