15.4. Embalagem de Python 3 RPMs

A maioria dos projetos Python usa Setuptools para embalagem, e define as informações de embalagem no arquivo setup.py. Para mais informações sobre embalagens do Setuptools, consulte a documentação do Setuptools.

Você também pode embalar seu projeto Python em um pacote RPM, que oferece as seguintes vantagens em comparação com o pacote Setuptools:

  • Especificação das dependências de um pacote em outras RPMs (mesmo não-Python)
  • Assinatura criptográfica

    Com a assinatura criptográfica, o conteúdo dos pacotes de RPM pode ser verificado, integrado e testado com o resto do sistema operacional.

15.4.1. Descrição do arquivo SPEC para um pacote Python

Um arquivo SPEC contém instruções que o utilitário rpmbuild usa para construir um RPM. As instruções estão incluídas em uma série de seções. Um arquivo SPEC tem duas partes principais nas quais as seções são definidas:

  • Preâmbulo (contém uma série de itens de metadados que são usados no Corpo)
  • Corpo (contém a parte principal das instruções)

Para mais informações sobre os arquivos SPEC, consulte Embalagem e distribuição de software.

Um arquivo RPM SPEC para projetos Python tem algumas especificidades em comparação com arquivos SPEC não-Python RPM. Mais notavelmente, um nome de qualquer pacote RPM de uma biblioteca Python deve sempre incluir o prefixo que determina a versão, por exemplo, python3 para Python 3.6 ou python38 para Python 3.8.

Outras especificações são mostradas no seguinte arquivo da SPEC example for the python3-detox package. Para a descrição de tais especificidades, veja as notas abaixo do exemplo.

%global modname detox                                                           1

Name:           python3-detox                                                   2
Version:        0.12
Release:        4%{?dist}
Summary:        Distributing activities of the tox tool
License:        MIT
URL:            https://pypi.io/project/detox
Source0:        https://pypi.io/packages/source/d/%{modname}/%{modname}-%{version}.tar.gz

BuildArch:      noarch

BuildRequires:  python36-devel                                                  3
BuildRequires:  python3-setuptools
BuildRequires:  python36-rpm-macros
BuildRequires:  python3-six
BuildRequires:  python3-tox
BuildRequires:  python3-py
BuildRequires:  python3-eventlet

%?python_enable_dependency_generator                                            4

%description

Detox is the distributed version of the tox python testing tool. It makes efficient use of multiple CPUs by running all possible activities in parallel.
Detox has the same options and configuration that tox has, so after installation you can run it in the same way and with the same options that you use for tox.

    $ detox

%prep
%autosetup -n %{modname}-%{version}

%build
%py3_build                                                                      5

%install
%py3_install

%check
%{__python3} setup.py test                                                      6

%files -n python3-%{modname}
%doc CHANGELOG
%license LICENSE
%{_bindir}/detox
%{python3_sitelib}/%{modname}/
%{python3_sitelib}/%{modname}-%{version}*

%changelog
...
1
A macro modname contém o nome do projeto Python. Neste exemplo, ele é detox.
2
Ao embalar um projeto Python em RPM, o prefixo python3 sempre precisa ser adicionado ao nome original do projeto. O nome original aqui é detox e o name of the RPM é python3-detox.
3
BuildRequires especifica quais pacotes são necessários para construir e testar este pacote. No BuildRequires, inclua sempre itens fornecendo ferramentas necessárias para a construção de pacotes Python: python36-devel e python3-setuptools. O pacote python36-rpm-macros é necessário para que os arquivos com /usr/bin/python3 shebangs sejam automaticamente alterados para /usr/bin/python3.6. Para maiores informações, veja Seção 15.4.4, “Manuseio de hashbangs em scripts Python”.
4
Cada pacote Python requer alguns outros pacotes para funcionar corretamente. Tais pacotes também precisam ser especificados no arquivo da SPEC. Para especificar o dependencies, você pode usar a macro %python_enable_dependency_generator para usar automaticamente as dependências definidas no arquivo setup.py. Se um pacote tem dependências que não são especificadas usando Setuptools, especifique-as dentro das diretivas adicionais Requires.
5
As macros %py3_build e %py3_install executam os comandos setup.py build e setup.py install, respectivamente, com argumentos adicionais para especificar os locais de instalação, o intérprete a utilizar e outros detalhes.
6
A seção check fornece uma macro que executa a versão correta do Python. A macro %{__python3} contém um caminho para o intérprete Python 3, por exemplo /usr/bin/python3. Recomendamos usar sempre a macro em vez de um caminho literal.