第 4 章 在 Python 脚本中处理解释器指令
在 Red Hat Enterprise Linux 9 中,可执行 Python 脚本应该使用解析程序指令(也称为 hashbangs 或 shebangs),至少指定主 Python 版本。例如:
#!/usr/bin/python3 #!/usr/bin/python3.9 #!/usr/bin/python3.11 #!/usr/bin/python3.12
在构建任何 RPM 软件包时,/usr/lib/rpm/redhat/brp-mangle-shebangs
buildroot 策略 (BRP) 脚本会自动运行,并尝试在所有可执行文件中更正解释器指令。
当遇到带有模糊的解释解释器指令的 Python 脚本时,BRP 脚本会生成错误,例如:
#!/usr/bin/python
或者
#!/usr/bin/env python
4.1. 修改 Python 脚本中的解释器指令
使用以下步骤修改 Python 脚本中的解释器指令,以便在 RPM 构建时出现错误。
先决条件
- Python 脚本中的一些解释器指令会导致构建错误。
步骤
要修改解释器指令,请完成以下任务之一:
在您的 SPEC 文件的
%prep
部分中使用以下宏:# %py3_shebang_fix SCRIPTNAME …
SCRIPTNAME 可以是任何文件、目录或文件和目录列表。
因此,列出的所有文件以及列出目录中所有
.py
文件都会修改其解释器指令以指向%{python3}
。将保留原始解释器指令的现有标记,并将添加%{py3_shebang_flags}
宏中定义的其他标志。您可以在 SPEC 文件中重新定义%{py3_shebang_flags}
宏,以更改将要添加的标志。从
python3-devel
软件包应用pathfix.py
脚本:# pathfix.py -pn -i %{python3} PATH …
您可以指定多个路径。如果
PATH
是一个目录,则pathfix.py
会递归扫描与模式^[a-zA-Z0-9_]+\.py$
匹配的 Python 脚本,而不仅仅是具有模糊的解释器指令。将上述命令添加到%prep
的上面,或添加到%install
部分的末尾。-
修改打包的 Python 脚本,以便它们符合预期格式。为此,您也可以使用 RPM 构建进程之外的
pathfix.py
脚本。在 RPM 构建外运行pathfix.py
时,将上例中的%{python3}
替换为解释器指令的路径,如/usr/bin/python3
或/usr/bin/python3.11
。
其它资源