"ValueError: _system non inizializzato" quando si utilizza apt.VersionCompare


9

Ho scritto uno script bash che deve confrontare due stringhe di versione per decidere di scaricare una nuova versione o meno. Il test si basa su uno script Python che lo fa apt.VersionCompare(), che fa il confronto delle versioni nel modo in cui lo aptfa.

#!/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)

Con l'aggiornamento a Ubuntu 14.4 questo ha smesso di funzionare.

Ho provato a cambiare lo script seguendo /programming/4957514/ come di seguito:

#!/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)

ma questo mi dà ValueError: _system not initialized. Come risolvere o c'è un modo migliore per confrontare le versioni come aptfa?

Risposte:


6

Stranamente il codice funziona quando lo eseguo da un prompt interattivo di Python. In ogni caso, questo bug report indica una soluzione (?) 1 :

Aggiungi una chiamata a apt_pkg.init_system()come documentato qui (o fai import aptpure):

#!/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 Apparentemente anche il InitSystemnome della funzione è cambiato, da CamelCase all'utilizzo di caratteri di sottolineatura.


ti è capitato di fare un import aptprompt interattivo prima dell'importazione apt_pkg? Ciò spiegherebbe le cose, poiché inizializza anche il modulo.
Anthon,

@Anthon Ho controllato la mia cronologia di Python3, non sembra. Ma ora in una shell Python ottengo quell'errore. Oo
muru,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.