«ValueError: _system not initialized» lors de l'utilisation d'apt.VersionCompare


9

J'ai écrit un script bash qui doit comparer deux chaînes de version pour décider de télécharger ou non une nouvelle version. Le test repose sur un script Python qui le fait apt.VersionCompare(), qui fait la comparaison des versions comme le aptfait.

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

Avec la mise à niveau vers Ubuntu 14.4, cela a cessé de fonctionner.

J'ai essayé de changer le script en suivant /programming/4957514/ comme ci-dessous:

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

mais cela me donne ValueError: _system not initialized. Comment résoudre, ou existe-t-il une meilleure façon de comparer des versions comme le aptfait?

Réponses:


6

Étrangement, le code fonctionne lorsque je l'exécute à partir d'une invite Python interactive. Quoi qu'il en soit, ce rapport de bogue pointe vers une solution (?) 1 :

Ajoutez un appel à apt_pkg.init_system()comme indiqué ici (ou faites- import aptle également):

#!/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 Apparemment, le InitSystemnom de la fonction a également changé, passant de CamelCase à l'utilisation de traits de soulignement.


vous est-il arrivé de faire un import aptà l'invite interactive avant d'importer apt_pkg? Cela expliquerait les choses, car cela initialise également le module.
Anthon

@Anthon J'ai vérifié mon historique python3, ça ne ressemble pas à ça. Mais maintenant, dans un shell python, je reçois cette erreur. Oo
muru
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.