4.5. 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.
4.5.1. Descrição típica do arquivo SPEC para um pacote Python RPM
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 python3
.
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
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 4.5.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.