Como manter o número da versão em um único lugar em um projeto python com setup.py e debian / control

1

Para um projeto em python em que estou trabalhando, gostaria de:

  • Mantenha uma string de versão em um único lugar.
  • Consiga obter a cadeia de versão em tempo de execução para fins de registro
    • Obtenha um valor padrão ao iniciar o código a partir do ramo de origem.
    • Obtenha um valor que depende do número de revisão do bzr da ramificação usada para criar o pacote de origem.
  • Disponibilize os pacotes do projeto em um PPA da Barra de Ativação usando uma receita .

Na maneira como o código funciona agora:

  • o número da versão está em debian/changelog
  • uma receita na barra de lançamento adiciona o número de revisão da ramificação de desenvolvimento quando o pacote de origem é criado.
  • uma função em setup.py analisa a primeira linha de debian/changelog para recuperar o número da versão e passá-lo para setup , de modo que setup --version funcione bem (sem o número de revisão, mas isso pode ser corrigido). / li>

No entanto, o número da versão não está disponível em tempo de execução. Qual seria uma boa maneira de fazer isso e atender aos requisitos acima?

Algumas soluções que usei / vi no passado são baseadas na geração de um módulo version.py no tempo de compilação a partir de um modelo:

  • Usando uma ferramenta externa

    Uma ferramenta / comando é usada para gerar um módulo version.py com o número da versão. No entanto, isso não funciona bem com as receitas da barra de lançamento porque a capacidade de executar comandos arbitrários em uma receita é desativada no launchpad .

  • Em setup.py

    Eu vi um projeto que subclasse distutils.command.install_data.install_data para executar algumas substituições de string na hora. No entanto, o código não é muito legível, então prefiro usar outra estratégia.

Além disso, eu também usei python-apt para apenas consultar o cache do apt para a versão do pacote instalado para recuperar a string da versão. No entanto, isso não funciona para exibir um valor padrão quando o código é iniciado a partir da ramificação de origem, a menos que o pacote não esteja instalado ou algum código de verificação de caminho seja adicionado, o que não é muito limpo do meu ponto de vista.

Eu já li outras perguntas no SO como:

mas eles não abordam o problema de lidar com o empacotamento e o controle de versão ao mesmo tempo.

Por favor, deixe-me saber o que poderia ser uma abordagem razoável para fazer isso e fornecer um link para um projeto de exemplo que use essa abordagem, se possível.

    
por jcollado 03.04.2013 / 13:19

1 resposta

4
  

Uma ferramenta / comando é usada para gerar um módulo version.py com o número da versão. No entanto, isso não funciona bem com as receitas da barra de lançamento porque a capacidade de executar comandos arbitrários em uma receita é desativada no launchpad.

Você pode, claro, fazer isso no momento da criação, em vez disso, no momento da criação do pacote-fonte.

version.py :

# Overwritten during Debian packaging build
package_version="unknown"

debian/rules :

override_dh_auto_build:
        dpkg-parsechangelog | sed -rne 's,^Version: (.*),package_version="", p' > version.py
        dh_auto_build

debian/clean :

version.py
    
por tumbleweed 04.04.2013 / 13:07