Distribuindo um pacote python junto com as dependências do módulo usando RPM

Eu tenho vários aplicativos python consistindo de scripts / módulos que devem ser empacotados e implantados como RPMs.

A parte mais complicada é que cada aplicativo deve ser distribuído junto com todas as dependências do módulo python, e elas devem ser usadas de preferência a todas as que estão instaladas em todo o sistema.

Os hosts de destino para alguns desses RPMs têm acesso limitado à rede, portanto, os RPMs devem conter todo o necessário para executar o aplicativo, em vez de fazer o download de qualquer coisa no momento da implantação.

Eu olhei para embalagem e distribuição de umvirtualenv, mas realocar um virtualenv não parece ser bem suportado.

Eu olhei parazc.buildout, mas encontrou a documentação a faltar. Eu pude ver como baixar dependências durante o desenvolvimento, mas não como distribuí-las como parte de um aplicativo maior. É possível que aplicativos diferentes exijam versões diferentes do mesmo módulo, portanto, eles não devem ser instalados em todo o sistema.

Outro ponto problemático é que quaisquer scripts python no aplicativo precisam ser modificados para usar um sys.path diferente durante o desenvolvimento e após a implantação, não consegui ver uma maneira óbvia de contornar isso.

São sugestões sobre a melhor forma de conseguir isso? Um resumo ideal do fluxo de trabalho do ponto de vista de um desenvolvedor seria semelhante a:

baixar fonte de aplicativoexecutar script para buscar dependências específicas do módulo, se não estiver presente (talvez usandopip)execute o script para construir o aplicativo python e empacote-o e todas as dependências baixadas no RPM

O RPM final deve então ser instalável e executado em um host sem acesso à rede e somente um interpretador python instalado.

questionAnswers(1)

yourAnswerToTheQuestion