构建 python rpm 包时,shebang 更改为 /usr/libexec/platform-python

构建 python rpm 包时,shebang 更改为 /usr/libexec/platform-python

我正在尝试从 RHEL8.2 机器上的 python 应用程序构建 RPM。

脚本上的 shebang 设置正确,但由于某种原因,当构建 RPM 时,#!/usr/bin/python3 shebang 会更改为。#!/usr/libexec/platform-python -s

我几乎尝试了一切。

我根据文档未定义损坏:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/packaging_and_distributing_software/advanced-topics

 %undefine __brp_mangle_shebangs

但shebangs仍然发生了变化。

这是规格文件的相关部分:

%undefine __brp_mangle_shebangs
Name: myapp
Version: 2.0.0
Release: 1%{?dist}
summary: rpm for my APP

BuildArch: noarch

### Build Dependencies ###
BuildRequires: python3-setuptools
BuildRequires: python3-devel

%?python_enable_dependency_generator

%build
%py3_build


%install
%py3_install

%files
....

我可以包含python*-rpm-macros在规格中,这会将 shebang 设置为类似的内容/usr/bin/python3.6,但它的限制性太大。我们的代码可以在任何> python3.6 中工作,因此如果我们在使用 python3.8 的系统中部署 rpm,它应该可以工作。

如何设置 /usr/bin/python3 或在 python 脚本上保持 shebang 不变? rpm什么时候打包的?

答案1

我刚刚遇到了同样的问题。这是后代的解决方法。

如果python文件(或任何文件)设置了可执行权限,那么重整就会开始。因此,我们可以使该文件在打包时不可执行,但在安装后变为可执行。

  1. 删除python文件的可执行权限。chmod -x script.py
  2. 按如下方式修改规范文件的 post 部分。
%post
chmod +x /your/installation/path/script.py

相关内容