4.6. Gestion des directives de l'interpréteur dans les scripts Python
Dans Red Hat Enterprise Linux 9, les scripts Python exécutables sont censés utiliser des directives d'interpréteur (également connues sous le nom de hashbangs ou shebangs) qui spécifient explicitement au minimum la version majeure de Python. Par exemple :
#!/usr/bin/python3 #!/usr/bin/python3.9 #!/usr/bin/python3.11
Le script /usr/lib/rpm/redhat/brp-mangle-shebangs
buildroot policy (BRP) est exécuté automatiquement lors de la construction de tout paquetage RPM et tente de corriger les directives de l'interpréteur dans tous les fichiers exécutables.
Le script BRP génère des erreurs lorsqu'il rencontre un script Python avec une directive d'interprétation ambiguë, telle que :
#!/usr/bin/python
ou
#!/usr/bin/env python
4.6.1. Modifier les directives de l'interpréteur dans les scripts Python
Utilisez la procédure suivante pour modifier les directives de l'interpréteur dans les scripts Python qui provoquent des erreurs de compilation au moment de la compilation du RPM.
Conditions préalables
- Certaines directives de l'interpréteur dans vos scripts Python provoquent une erreur de compilation.
Procédure
Pour modifier les directives de l'interpréteur, effectuez l'une des tâches suivantes :
Utilisez la macro suivante dans la section
%prep
de votre fichier SPEC :# %py3_shebang_fix SCRIPTNAME..
SCRIPTNAME peut être un fichier, un répertoire ou une liste de fichiers et de répertoires.
En conséquence, tous les fichiers listés et tous les fichiers
.py
dans les répertoires listés verront leurs directives d'interprétation modifiées pour pointer vers%{python3}
. Les drapeaux existants de la directive d'interprétation originale seront préservés et des drapeaux supplémentaires définis dans la macro%{py3_shebang_flags}
seront ajoutés. Vous pouvez redéfinir la macro%{py3_shebang_flags}
dans votre fichier SPEC pour modifier les drapeaux qui seront ajoutés.Appliquer le script
pathfix.py
du paquetpython3-devel
:# pathfix.py -pn -i %{python3} PATH ..
Vous pouvez spécifier plusieurs chemins. Si un
PATH
est un répertoire,pathfix.py
recherche de manière récursive tous les scripts Python correspondant au modèle^[a-zA-Z0-9_] \.py$
, et pas seulement ceux dont la directive d'interprétation est ambiguë. Ajoutez la commande ci-dessus à la section%prep
ou à la fin de la section%install
.-
Modifiez les scripts Python fournis afin qu'ils soient conformes au format attendu. À cette fin, vous pouvez également utiliser le script
pathfix.py
en dehors du processus de compilation du RPM. Lorsque vous exécutezpathfix.py
en dehors d'une compilation RPM, remplacez%{python3}
de l'exemple précédent par un chemin d'accès à la directive de l'interpréteur, tel que/usr/bin/python3
ou/usr/bin/python3.11
.
Ressources supplémentaires