Red Hat Training

A Red Hat training course is available for RHEL 8

第 41 章 在 Python 脚本中处理解释器指令

在 Red Hat Enterprise Linux 8 中,可执行 Python 脚本应该使用解析程序指令(也称为 hashbangs 或 shebangs),至少指定主 Python 版本。例如:

#!/usr/bin/python3
#!/usr/bin/python3.6
#!/usr/bin/python2

在构建任何 RPM 软件包时,/usr/lib/rpm/redhat/brp-mangle-shebangs buildroot 策略 (BRP) 脚本会自动运行,并尝试在所有可执行文件中更正解释器指令。

当遇到带有模糊的解释解释器指令的 Python 脚本时,BRP 脚本会生成错误,例如:

#!/usr/bin/python

或者

#!/usr/bin/env python

41.1. 修改 Python 脚本中的解释器指令

修改 Python 脚本中的解释器指令,该指令在 RPM 构建时导致构建错误。

先决条件

  • Python 脚本中的一些解释器指令会导致构建错误。

流程

要修改解释器指令,请完成以下任务之一:

  • platform-python-devel 软件包中应用 pathfix.py 脚本:

    # pathfix.py -pn -i %{__python3} PATH …​

    请注意,可以指定多个 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 以外的版本,请调整前面的命令以包含所需的版本。