ich bin gerade dabei Versionen miteinander zu vergleichen. Durch einen Zufall bin ich auf parse_version vom Modul pkg_resources. Nun bin ich ein wenig verwirrt. Vor diesem Hintergrund habe ich für mich etwas kleines gebastelt. Bisher bin ich so verfahren, dass ich zwei Variablen miteinander verglichen habe - dies entspricht hier im Quelltext der compare_parser()-Funktion. Wie ich schon schrieb, bin ich auf das Modul pkg_resources gestoßen. Dazu habe ich dann die Funktion compare_parser gebastelt. Um zu testen, ob beide die "Wahrheit" sagen, habe ich dazu einen Generator gebastelt, und in das Wörterbuch einige Versionen geschrieben. Zur Simulation ist hier der Schlüssel (Key) die derzeitige Programmversion und der Wert (Value) ist sozusagen die Aktualisierungs-Version auf einem Server. Und nun werden die Versionen in meinem Skript miteinander verglichen. In meinem Fall sagen beide Varianten die Wahrheit.
Deswegen wollte ich mich an euch wenden und fragen, ob es vollkommen ausreicht, wenn man die Variablen so vergleicht wie in der compare_versions oder ob man eher die compare_parser()-übernehmen sollte? Gibt es Grenzen und Tücken?
Hinweis: Die Print-Anweisungen ignorieren wir mal getrost. Sie sind für mich, um selbst zu vergleichen.
Code: Alles auswählen
from pkg_resources import parse_version
def dict_version_generator():
dict_versions = {"1.5.4": "1.5.4.5",
"1.5.5": "1.5.4",
"1.6.4": "1.8.4"}
for k, v in dict_versions.iteritems():
yield k, v
def compare_parser(v1, v2):
print "\nv1", v1
print "v2", v2
return parse_version(v1) < parse_version(v2)
def compare_versions(v1, v2):
print "\nv1", v1
print "v2", v2
if unicode(v1) == unicode(v2):
return False
if unicode(v1) < unicode(v2):
return True
if __name__ == "__main__":
for ke, val in dict_version_generator():
print "compare_versions", compare_versions(ke, val)
print "compare_parser", compare_parser(ke, val)