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-macrosShebangを似たように設定する仕様を含めることができますが、制限が/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

関連情報