@pExplorer: Anmerkungen zum gezeigten Quelltext:
Das `Cache`-Objekt ist ein Kontextmanager, das sollte man mit ``with`` verwenden.
Der Code prüft eigentlich nur ob das Paket im Cache vorhanden ist, meldet aber keine Probleme mit Paketen die zwar im Cache sind, aber gar nicht vollständig installiert sind, entweder weil die Installation mitten drin abgebrochen wurde, oder das Paket entfernt wurde und noch Konfigurationsdateien vorhanden sind. Mit dem `is_installed`-Wert muss man halt auch irgend etwas *machen*.
Zeichenketten mit ``+`` zusammenstückeln ist eher BASIC denn Python. Um Werte in Zeichenketten zu formatieren gibt es f-Zeichenketten, und der Compiler verbindet Zeichenketten die nur durch Whitespace-Zeichen voneinander getrennt sind.
Ungetestet:
Code: Alles auswählen
def run_packages_to_check(self):
self.progress.emit("<b>Installationspruefung:</b>")
with apt.Cache() as cache:
cache.open()
for package_name in self.packages_to_check:
package = cache.get(package_name)
self.progress.emit(
package_name
if package and package.is_installed
else (
f"Es fehlt das Paket:<br>"
f"{package_name}<br>"
f"Zur Nutzung des vollen Funktionsumfanges muss es"
f" installiert werden!"
)
)
Wenn es nur um den Test auf „installiert“ geht, würde ich mir einfach eine Funktion basteln die ``dpkg-query`` aufruft:
Code: Alles auswählen
import subprocess
def is_installed(package_name):
result = subprocess.run(
["dpkg-query", "--show", "--showformat", "${Status}\n", package_name],
capture_output=True,
check=False,
)
return b"install ok installed" in result.stdout.splitlines()
...
def run_packages_to_check(self):
self.progress.emit("<b>Installationspruefung:</b>")
for package_name in self.packages_to_check:
self.progress.emit(
package_name
if is_installed(package_name)
else (
f"Es fehlt das Paket:<br>"
f"{package_name}<br>"
f"Zur Nutzung des vollen Funktionsumfanges muss es"
f" installiert werden!"
)
)