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 Copiar o linkLink copiado para a área de transferência!
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.
- 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
epython3-setuptools
. O pacotepython36-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 adicionaisRequires
. - 5
- As macros %py3_build e %py3_install executam os comandos
setup.py build
esetup.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.