"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?

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.


¿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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.