我正在尝试从 RHEL8.2 机器上的 python 应用程序构建 RPM。
脚本上的 shebang 设置正确,但由于某种原因,当构建 RPM 时,#!/usr/bin/python3
shebang 会更改为。#!/usr/libexec/platform-python -s
我几乎尝试了一切。
%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文件(或任何文件)设置了可执行权限,那么重整就会开始。因此,我们可以使该文件在打包时不可执行,但在安装后变为可执行。
- 删除python文件的可执行权限。
chmod -x script.py
- 按如下方式修改规范文件的 post 部分。
%post
chmod +x /your/installation/path/script.py