Feststellen, ob eine neuere Version vorliegt

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
JoergZ
User
Beiträge: 5
Registriert: Donnerstag 4. September 2014, 11:28

Ich arbeite mit OVOS (https://github.com/OpenVoiceOS). Das Programm ist noch in der Entwicklung und es gibt immer wieder Veränderungen und Verbesserungen. Üblicherweise werden Aktualisierungen mit

Code: Alles auswählen

pip install git+https://github.com/OpenVoiceOS/PAKETNAME
installiert. Aber da kann es passieren, dass ein Modul auch dann "neu" installiert wird, obwohl das lokale Paket dieselbe Versionsnummer trägt.

Ich suche nun nach einer Möglichkeit vorab zu prüfen, ob überhaupt Aktualisierungen vorliegen. Es könnte sich auf alle mit pip installierten Pakete beziehen. Schön wäre es, wenn man mit Filtern arbeiten kann. Als konstruiertes Beispiel könnte es so aussehen:

Code: Alles auswählen

pip check_update "ovos-" "https://github.com/OpenVoiceOS/"
, wobei dieser Befehl dann alle Versionsnummern von installierten Paketen, die mit "ovos-" anfangen, sich holt und auf github nachschaut, ob es Versionen mit höheren Versionsnummern gibt. Das Ergebnis sollte dann als Liste zu aktualisierender Pakete ausgegeben werden. Gibt es so etwas schon? Oder womöglich ein Github Tool (oder Terminalbefehl, API-Zugriff, HTTP-Zugriff,...), mit dem ich die aktuelle Versionsnummer des letzten Mergings eines Repositories abrufen kann.
August1328
User
Beiträge: 65
Registriert: Samstag 27. Februar 2021, 12:18

Hallo Jörg,

da ich mich auch mit diesem Thema beschäftigt habe, hier werden verschiedene Möglichkeiten erklärt:

https://superuser.com/questions/259474/ ... p-packages

Gruß,
Andy
Benutzeravatar
snafu
User
Beiträge: 6744
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ich glaube ja, es war eine direkte Abfrage bei GitHub gemeint, da nicht unbedingt jedes Projekt bei PyPI hochgeladen wird. Insofern könnte man naiv über die Version-Tags gehen. GitHub bietet eine Rest API an, die man auch als nicht registrierter User nutzen kann. Allerdings stößt man da schnell ans Rate Limit.

Das folgende Skript fragt alle Repos eines Users ab und zieht sich dann die Tags der einzelnen Repos:

Code: Alles auswählen

#!/usr/bin/env python3
import requests

USER_REPOS_TEMPLATE = "https://api.github.com/users/{}/repos"
REPO_TAGS_TEMPLATE = "https://api.github.com/repos/{}/{}/tags"


def request_json(url):
    response = requests.get(url)
    response.raise_for_status()
    return response.json()


def get_repo_names(user_name):
    url = USER_REPOS_TEMPLATE.format(user_name)
    return [repo["name"] for repo in request_json(url)]


def get_repo_tags(user, repo):
    url = REPO_TAGS_TEMPLATE.format(user, repo)
    return [tag["name"] for tag in request_json(url)]


def main():
    ovos = "OpenVoiceOS"
    for repo in get_repo_names(ovos):
        tags = get_repo_tags(ovos, repo)
        print(repo, max(tags, default="n/a"))


if __name__ == "__main__":
    main()
Das soll natürlich nur ein erster Ansatz sein. Man würde sich die zuletzt abgefragten Tags als JSON-Datei merken und dann bei einer späteren Abfrage schauen, was sich verändert hat. Mit den geänderten Repos füttert man dann entsprechend ``pip``, was sich natürlich auch automatisieren lässt.

Großes Manko: Nur für wenige der Repos von OpenVoiceOS hat die Tag-Abfrage überhaupt geklappt. Das ist somit keinesfalls ein sicheres Kriterium...

EDIT: Und ansonsten gibt es noch einige Treffer, wenn man bei PyPI nach GitHub sucht. Also wohl so Wrapper, die evtl. eine ähnliche Funktionalität bieten (kenne mich da nicht aus). Ob es was Fertiges zum Checken von Updates gibt, weiß ich nicht. Wie gesagt kommt es auch darauf an, wieviel an Info das jeweilige Projekt überhaupt liefert.
JoergZ
User
Beiträge: 5
Registriert: Donnerstag 4. September 2014, 11:28

OK, das sieht ganz brauchbar aus. Und es stimmt, dass die Versionisierung zur Zeit (noch) nicht einheitlich ist. Danke!
Antworten