搜索

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

download PDF

在 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

其它资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.