A API do Python apt pode detectar, um pacote é “mantido”?

1

Eu usei o método especificado aqui para colocar um "hold" em um determinado pacote ("jenkins") para evitar que o sistema faça o upgrade:

# dpkg --get-selections | grep jenkins
jenkins                                         hold

Existe alguma maneira de detectar esse status especial usando a API do Python para o apt? Por mais que eu pesquise os objetos Package , Record e Version , não vejo qualquer menção ao pacote ser "retido".

Eu realmente detesto gerar um dpkg -processo para fazer isso ... Alguma esperança?

    
por Mikhail T. 13.10.2017 / 21:16

2 respostas

1

Ok, eu encontrei - olhando dentro de /usr/bin/unattended-upgrade . O objeto apt.Package , na verdade, tem um membro chamado _pkg , que é do tipo apt_pkg.Package . Esse tem um membro selected_state - uma constante numérica (um enum). Isto é, o que eu uso no meu código agora:

    import apt
    import apt_pkg
    ...
    if package._pkg.selected_state == apt_pkg.SELSTATE_HOLD:
        pkg['hold'] = True
    
por Mikhail T. 16.10.2017 / 22:07
1

Eu tenho medo de que essa funcionalidade não pareça estar exposta na API do Python. Eles têm marked_delete , marked_downgrade , marked_install , etc., mas não marked_held . No entanto, ele existe na API do C ++ . Alguma chance de você poder usar isso?

    
por Kyle 13.10.2017 / 22:04