“ValueError: _system não inicializado” ao usar o apt.VersionCompare

9

Eu escrevi um script bash que tem que comparar duas cadeias de versão para decidir baixar ou não uma nova versão. O teste se baseia em um script Python que faz apt.VersionCompare(), que faz comparação de versões da mesma forma que aptfaz.

#!/usr/bin/env python
import sys, apt
res = apt.VersionCompare(sys.argv[1], sys.argv[2])
if res < 0:
   sys.exit(-1)
if res > 0:
   sys.exit(1)
sys.exit(0)

Com a atualização para o Ubuntu 14.4, isso parou de funcionar.

Tentei alterar o script seguindo /programming/4957514/, conforme abaixo:

#!/usr/bin/env python
import sys, apt_pkg
res = apt_pkg.version_compare(sys.argv[1], sys.argv[2])
if res < 0:
   sys.exit(-1)
if res > 0:
   sys.exit(1)
sys.exit(0)

mas isso me dá ValueError: _system not initialized. Como resolver, ou existe uma maneira melhor de comparar versões como aptfaz?

Christa
fonte

Respostas:

6

Estranhamente, o código funciona quando eu o executo a partir de um prompt interativo do Python. De qualquer forma, este relatório de bug aponta para uma solução (?) 1 :

Adicione uma chamada apt_pkg.init_system()como documentado aqui (ou faça import apttambém):

#!/usr/bin/env python
import sys, apt_pkg
apt_pkg.init_system()
res = apt_pkg.version_compare(sys.argv[1], sys.argv[2])
if res < 0:
    sys.exit(-1)
if res > 0:
    sys.exit(1)
sys.exit(0)

1 Aparentemente, o InitSystemnome da função também mudou, de CamelCase para usar sublinhados.

muru
fonte
você fez um import aptprompt interativo antes de importar apt_pkg? Isso explicaria as coisas, pois isso também inicializa o módulo.
Anthon
@ Anthon Eu verifiquei minha história python3, não se parece. Mas agora em um shell python eu recebo esse erro. Oo
muru