Red Hat Training

A Red Hat training course is available for RHEL 8

3.2.5. Un ejemplo de archivo SPEC para un programa escrito en Python

Esta sección muestra un archivo SPEC de ejemplo para el programa pello escrito en el lenguaje de programación Python. Para más información sobre pello, véase Sección 2.1.1, “Ejemplos de código fuente”.

Un archivo SPEC de ejemplo para el programa pello escrito en Python

Name:           pello
Version:        0.1.1
Release:        1%{?dist}
Summary:        Hello World example implemented in Python

License:        GPLv3+
URL:            https://www.example.com/%{name}
Source0:        https://www.example.com/%{name}/releases/%{name}-%{version}.tar.gz

BuildRequires:  python
Requires:       python
Requires:       bash

BuildArch:      noarch

%description
The long-tail description for our Hello World Example implemented in Python.

%prep
%setup -q

%build

python -m compileall %{name}.py

%install

mkdir -p %{buildroot}/%{_bindir}
mkdir -p %{buildroot}/usr/lib/%{name}

cat > %{buildroot}/%{_bindir}/%{name} <←EOF
#!/bin/bash
/usr/bin/python /usr/lib/%{name}/%{name}.pyc
EOF

chmod 0755 %{buildroot}/%{_bindir}/%{name}

install -m 0644 %{name}.py* %{buildroot}/usr/lib/%{name}/

%files
%license LICENSE
%dir /usr/lib/%{name}/
%{_bindir}/%{name}
/usr/lib/%{name}/%{name}.py*

%changelog
* Tue May 31 2016 Adam Miller <maxamillion@fedoraproject.org> - 0.1.1-1
  - First pello package

Importante

El programa pello está escrito en un lenguaje interpretado compilado en bytes. Por lo tanto, el shebang no es aplicable porque el archivo resultante no contiene la entrada.

Como el tinglado no es aplicable, puede aplicar uno de los siguientes enfoques:

  • Cree un script de shell no compilado que llame al ejecutable.
  • Proporcionar un pequeño trozo de código Python que no esté compilado en bytes como punto de entrada a la ejecución del programa.

Estos enfoques son útiles sobre todo para grandes proyectos de software con muchos miles de líneas de código, donde el aumento de rendimiento del código precompilado es considerable.

La directiva BuildRequires, que especifica las dependencias en tiempo de compilación del paquete, incluye dos paquetes:

  • El paquete python es necesario para realizar el proceso de compilación de bytes
  • El paquete bash es necesario para ejecutar el pequeño script de entrada

La directiva Requires, que especifica las dependencias en tiempo de ejecución del paquete, incluye sólo el paquete python. El programa pello requiere el paquete python para ejecutar el código compilado en bytes en tiempo de ejecución.

La sección %build, que especifica cómo construir el software, corresponde al hecho de que el software está compilado en bytes.

Para instalar pello, es necesario crear un script envolvente porque el shebang no es aplicable en los lenguajes compilados en bytes. Hay múltiples opciones para lograr esto, como:

  • Hacer un script separado y utilizarlo como una directiva separada SourceX.
  • Creación del archivo en línea en el archivo SPEC.

Este ejemplo muestra la creación de un script envolvente en línea en el archivo SPEC para demostrar que el archivo SPEC en sí mismo es scriptable. Este script envolvente ejecutará el código compilado en bytes de Python utilizando un documento here.

La sección %install en este ejemplo también corresponde al hecho de que tendrá que instalar el archivo compilado en bytes en un directorio de la biblioteca en el sistema de tal manera que se pueda acceder a él.