Mam problem jak w tytule.
W dużym skrócie piszę program w Python 3, którego jednym z zadań jest pobieranie pakietu z podanego adresu url bazując na słowniku ( {'pakiet': {'filename': 'pakiet.deb'}, {'pakiet2': {'filename': 'pakiet2.deb'}} )
Przykładowa funkcja:
def install(self, display_name, filename):
print(" Installing...")
print(" ")
filepath = os.path.join("/opt/MeeShop/.cache", filename)
command = 'LANG=C aegis-dpkg -i "{}"'.format(filepath)
try:
result = subprocess.check_output(command, shell=True, stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e:
result = e.output
result = result.decode("utf-8")
depends = re.findall("depends on (.+);", result)
if depends:
depends = ', '.join(depends)
print(" Package {} depends on following\n dependencies, not installed yet: {}.format(display_name, depends))
print(" ")
print(" {}{} installed!{}".format(green, display_name, reset))
input(" {}{}Press Enter to continue... {}".format(blink, cyan, reset))
Jak widzicie potrafi już znaleźć brakujące zależności.
Teraz jest haczyk.
Skrypt ma dla każdej zależności pobierać ją (w sensie np. zależność to 'pakiet3' to znajduje ją w słowniku pakiety i ściąga wartość filename ( packages[dependency]['filename'] ), zapisywać i instalować za pomocą install (w klasie Apt). Ale jeśli dana zależność podczas instalacji wymaga innych zależności, je też ma pobierać i instalować. Itp. itd.
Dopóki WSZYSTKIE pierwotne zależności nie zostaną zainstalowane, i nie będzie żadnych problemów zależności.
Pokręcone, ale taka jest sprawa.
I nie wiem jak mam to zrobić. Aby pętla trwała dopóki powyższe nie zostanie spełnione.
Jakieś pomysły?
Z góry dzięki
Pozdrawiam