Red Hat Training

A Red Hat training course is available for RHEL 8

3.2.5. Um arquivo SPEC de exemplo para um programa escrito em Python

Esta seção mostra um arquivo SPEC de exemplo para o programa pello escrito na linguagem de programação Python. Para maiores informações sobre pello, veja Seção 2.1.1, “Exemplos de código fonte”.

Um arquivo SPEC de exemplo para o programa pello escrito em 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

O programa pello é escrito em uma linguagem interpretada por bytes. Portanto, o shebang não é aplicável porque o arquivo resultante não contém a entrada.

Como o shebang não é aplicável, você pode querer aplicar uma das seguintes abordagens:

  • Criar um script de shell não compilado em bytes que chamará o executável.
  • Fornecer um pouco do código Python que não seja compilado por bytes como ponto de entrada para a execução do programa.

Estas abordagens são úteis especialmente para grandes projetos de software com muitos milhares de linhas de código, onde o aumento de desempenho do código pré-compilado é considerável.

A diretiva BuildRequires, que especifica as dependências de tempo de construção para o pacote, inclui dois pacotes:

  • O pacote python é necessário para realizar o processo de compilação de byte-compilação
  • O pacote bash é necessário para executar o pequeno roteiro do ponto de entrada

A diretiva Requires, que especifica as dependências de tempo de execução para o pacote, inclui apenas o pacote python. O programa pello requer o pacote python para executar o código compilado pelo byte em tempo de execução.

A seção %build, que especifica como construir o software, corresponde ao fato de que o software é compilado por bytes.

Para instalar pello, você precisa criar um roteiro de embalagem porque o shebang não é aplicável em linguagens compiladas por bytes. Existem múltiplas opções para realizar isto, como por exemplo:

  • Fazendo um roteiro separado e usando-o como uma diretriz separada SourceX.
  • Criação do arquivo em linha no arquivo da SPEC.

Este exemplo mostra a criação de um roteiro de embalagem em linha no arquivo SPEC para demonstrar que o próprio arquivo SPEC é scriptable. Este script de invólucro executará o código Python compilado por bytes, usando um documento here.

A seção %install neste exemplo também corresponde ao fato de que você precisará instalar o arquivo compilado pelo byte em um diretório de biblioteca no sistema, de modo que ele possa ser acessado.