Lokale Python-Bibliotheksverwaltung

484
wilk

Auf meinem Ubuntu-System habe ich vor langer Zeit eine Vielzahl von Python-Bibliotheken in / usr / local / lib installiert, von denen einige jetzt durch die der offiziellen Ubuntu-Pakete in / usr / lib veraltet sind. Dies kann die Ursache von Problemen sein, da die in / usr / local / lib in der Standard-Python-Umgebung Vorrang haben.

Was ist Ihrer Meinung nach der beste Weg, um aus dem / usr / local / lib-Baum die Bibliotheken zu identifizieren, für die eine neuere Version in / usr / lib vorhanden ist, und diejenigen, die jetzt länger benötigt werden?

Ich dachte an die Überwachung der / usr / local / lib / python * -Bäume für Python-Skripts, die auf ihre Bibliotheken zugreifen, und die manuelle Überprüfung, ob die entsprechende Bibliothek in / usr / lib / python * funktioniert, aber ist dies die beste Strategie?

1

1 Antwort auf die Frage

1
hoefling

Leider gibt es keine Möglichkeit, dies mit den vorhandenen Befehlszeilentools zu überprüfen, da die Auflistung von Paketen mit pipziemlich begrenzt ist (ich denke, es wird mehr möglich sein, sobald # 4575 implementiert ist). Mit etwas Scripting können Sie jedoch die Paketfilterung und den Versionsvergleich selbst durchführen. Hier ist ein Vorschlag:

#!/usr/bin/env python3  from distutils.version import LooseVersion from pkg_resources import find_distributions  sys_pkgs = find_distributions('/usr/lib/python3/dist-packages') local_pkgs = find_distributions('/usr/local/lib/python3.6/dist-packages')  for pkg in local_pkgs: sys_pkg = next((p for p in sys_pkgs if p.project_name == pkg.project_name), None) if sys_pkg is not None and LooseVersion(sys_pkg.version) >= LooseVersion(pkg.version): print(pkg) 

Zunächst wird der Skript - Scans /usr/lib/python3/dist-packagesund /usr/local/lib/python3.6/dist-packagesfür installierte Pakete (stellen Sie die Python - Version / Zielpfade je nach Bedarf). Danach überprüfen Sie für jedes "lokale" Paket Folgendes:

  1. Ein "System" -Paket mit demselben Namen wird installiert und
  2. hat eine neuere Version als die "lokale"

Wenn beide Bedingungen erfüllt sind, gilt das "lokale" Paket als veraltet und wird gedruckt. Nachdem Sie die Liste erstellt haben, sollte das Deinstallieren der Einträge über gewöhnliches pip3 uninstall <pkgname>eine einfache Aufgabe sein.

Danke, genau das brauchte ich. wilk vor 5 Jahren 0
Froh, dass ich helfen konnte! hoefling vor 5 Jahren 0