"ValueError: _system no inicializado" cuando se utiliza apt.VersionCompare

9

Escribí un script bash que tiene que comparar dos cadenas de versión para decidir descargar una nueva versión o no. La prueba se basa en un script de Python que sí apt.VersionCompare()lo hace, que hace la comparación de versiones de la misma manera apt.

#!/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 la actualización a Ubuntu 14.4, esto dejó de funcionar.

Traté de cambiar el script siguiendo /programming/4957514/ como se muestra a continuación:

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

Pero esto me da ValueError: _system not initialized. ¿Cómo resolver, o hay una mejor manera de comparar versiones como apthace?

Christa
fuente

Respuestas:

6

Curiosamente, el código funciona cuando lo ejecuto desde un indicador interactivo de Python. En cualquier caso, este informe de error apunta a una solución (?) 1 :

Agregue una llamada a apt_pkg.init_system()como se documenta aquí (o import apttambién):

#!/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, el InitSystemnombre de la función también ha cambiado, de CamelCase a usar guiones bajos.

muru
fuente
¿Por casualidad hiciste un import aptmensaje interactivo antes de importar apt_pkg? Eso explicaría las cosas, ya que eso también inicializa el módulo.
Anthon
@Anthon Revisé mi historial de python3, no lo parece. Pero ahora en un shell de Python me sale ese error. Oo
muru