16.5. 在 Python 脚本中处理解释器指令
在 Red Hat Enterprise Linux 8 中,可执行 Python 脚本应该使用解析程序指令(也称为 hashbangs 或 shebangs),至少指定主 Python 版本。例如:
在构建任何 RPM 软件包时,/usr/lib/rpm/redhat/brp-mangle-shebangs buildroot 策略 (BRP) 脚本会自动运行,并尝试在所有可执行文件中更正解释器指令。
当遇到带有模糊的解释解释器指令的 Python 脚本时,BRP 脚本会生成错误,例如:
#!/usr/bin/python
#!/usr/bin/python
或者
#!/usr/bin/env python
#!/usr/bin/env python
16.5.1. 修改 Python 脚本中的解释器指令 复制链接链接已复制到粘贴板!
修改会在 RPM 构建时导致构建错误的解释器指令。
先决条件
- Python 脚本中的一些解释器指令会导致构建错误。
流程
要修改解释器指令,请完成以下任务之一:
应用
platform-python-devel软件包中的pathfix.py脚本:pathfix.py -pn -i %{__python3} PATH …# pathfix.py -pn -i %{__python3} PATH …Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,可以指定多个
PATH。如果PATH是一个目录,则pathfix.py会递归扫描与模式^[a-zA-Z0-9_]+\.py$匹配的 Python 脚本,而不仅仅是具有模糊的解释器指令。将此命令添加到%prep部分,或者在%install部分的末尾。-
修改打包的 Python 脚本,以便它们符合预期格式。为此,
pathfix.py也可用于 RPM 构建过程外。当在 RPM 构建外运行pathfix.py时,将上面示例中的%{__python3}替换为解释器指令的路径,如/usr/bin/python3。
如果打包的 Python 脚本需要 Python 3.6 以外的版本,请调整前面的命令以包括所需的版本。
16.5.2. 更改自定义软件包中的 /usr/bin/python3 解释器指令 复制链接链接已复制到粘贴板!
默认情况下,/usr/bin/python3 格式的解释器指令被替换为指向 platform-python 软件包中的 Python 解释器指令,该指令用于 Red Hat Enterprise Linux 的系统工具。您可以更改自定义软件包中的 /usr/bin/python3 解释器指令,以指向从 AppStream 存储库安装的 Python 的特定版本。
流程
要为特定版本的 Python 构建软件包,请将相应
子软件包添加到python软件包的python*-rpm-macrosspec文件的 BuildRequires 部分。例如,对于 Python 3.6,包括以下行:BuildRequires: python36-rpm-macros
BuildRequires: python36-rpm-macrosCopy to Clipboard Copied! Toggle word wrap Toggle overflow 因此,自定义软件包中的
/usr/bin/python3解释器指令会自动转换为/usr/bin/python3.6。
要防止 BRP 脚本检查和修改解释器指令,请使用以下 RPM 指令:
%undefine __brp_mangle_shebangs
%undefine __brp_mangle_shebangs