O que o Requires: Python (package) faz para os arquivos de especificações do RHEL?

1

Estou empacotando alguns pacotes Python atualmente sem RPMs, e alguns deles dependem de outros que estou empacotando.

Durante o empacotamento, notei um formato em que as pessoas fazem: Require: python(pkg-name) , mas estou tentando entender se há alguma sintaxe específica para usar isso? Porque quando é usado, parece não se importar com as versões do pacote necessário.

Exemplo:

Requires: Python(gocd-cli) >= 0.9

Aparece na lista de solicitações depois que eu construo meu RPM:

$ rpm -qp --requires dist/gocd-cli.encryption.blowfish-1.0-1.noarch.rpm
Python(gocd-cli) >= 0.9
python(abi) = 2.6
python-crypto
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1

Este pacote é instalado perfeitamente, apesar da versão do pacote gocd-cli > = 0.9 não foi construído e disponibilizado ainda.

Em resumo, o que estou tentando entender é:

  1. Como o Requires: Python() deve ser usado?
  2. Para que é chamada a parte Python() ? Eu também vi isso para Ruby, Perl e outros…
por gaqzi 26.10.2015 / 10:57

1 resposta

3

Enquanto os módulos Ruby e Perl usam esses recursos virtuais, o Python AFAIK não os utiliza.

Não é nada além de ofertas virtuais (consulte o capítulo Criando CAPACIDADES Virtuais ). É útil se você souber qual módulo deseja usar, mas não sabe qual pacote o contém. Enquanto na maioria dos casos é muito simples e perl-foo fornece perl(foo) , existem casos que não são tão simples. Por exemplo. perl(APR) é fornecido por mod_perl .

As provisões virtuais para Perl são bastante antigas e são tratadas diretamente pelo rpm e pelo rpmbuild. No passado, em Ruby, você tinha que adicioná-los manualmente, mas agora ele é tratado também por rpm. Para o python, não havia ninguém que controlasse essa alteração e, em geral, não usava as virtuais. Então você deve exigir o nome exato do pacote.

Conclusão:

Se você estiver empacotando biblioteca python, não há problema em colocar as especificações:

Provides: python(foo) = %{version}-%{release}

No entanto, você não deve esperar que outros módulos python tenham isso, e você precisa deles usando o nome normal do pacote.

E uma nota final - Requer / Fornece diferencia maiúsculas de minúsculas, então Python (foo)! = python (foo).

    
por 26.10.2015 / 15:52