第6章 Python スクリプトでのインタープリターディレクティブの変更
Red Hat Enterprise Linux 10 では、実行可能な Python スクリプトは、少なくとも主要な Python バージョンを明示的に指定するインタープリターディレクティブ (別名 hashbangs または shebangs) を使用することが想定されます。以下に例を示します。
#!/usr/bin/python3 #!/usr/bin/python3.12
#!/usr/bin/python3
#!/usr/bin/python3.12
/usr/lib/rpm/redhat/brp-mangle-shebangs
buildroot
ポリシー BRP (buildroot policy) スクリプトは、RPM パッケージをビルドする際に自動的に実行され、実行可能なすべてのファイルでインタープリターディレクティブを修正しようとします。BRP スクリプトは、#!/usr/bin/python
や #!/usr/bin/env python
などのあいまいなインタープリターディレクティブを持つ Python スクリプトを検出するとエラーを生成します。
RPM ビルド時のビルドエラーを防ぐために、Python スクリプト内のインタープリターディレクティブを変更できます。
前提条件
- Python スクリプトのインタープリターディレクティブの一部でビルドエラーが発生する。
手順
シナリオに応じて、次のいずれかの手順を実行してインタープリターディレクティブを変更します。
spec
ファイルの%prep
セクションで次のマクロを使用します。%py3_shebang_fix <SCRIPTNAME> …
%py3_shebang_fix <SCRIPTNAME> …
Copy to Clipboard Copied! Toggle word wrap Toggle overflow SCRIPTNAME には、任意のファイル、ディレクトリー、またはファイルおよびディレクトリーのリストを指定できます。
その結果、リストされたすべてのファイルと、リストされたディレクトリー内のすべての
.py
ファイルのインタープリターディレクティブが%{python3}
を指すように変更されます。元のインタープリターディレクティブの既存のフラグは保持され、%{py3_shebang_flags}
マクロで定義された追加のフラグが追加されます。spec
ファイルの%{py3_shebang_flags}
マクロを再定義すると、追加されるフラグを変更できます。- パッケージ化した Python スクリプトを、想定される形式に準拠するように変更します。