Stellen Sie die Python-Installation auf den Standard und die entsprechenden Paketabhängigkeiten wieder her

14

Ich habe viel mit meinen Python-Installationen (2 und 3) herumgespielt und eine Reihe von Paketen installiert, einige mit apt-get, aber die meisten mit pip. Ich habe auch viele aptinstallierte Pakete mit pipeiner neueren Version aktualisiert .

Meine Frage lautet:
Wie kann ich all diese Änderungen rückgängig machen, alle pipinstallierten Python-Pakete entfernen und nur die vorinstallierten Standardpakete in ihrer Standard-Repository-Version sowie die von, apt-getjedoch nur als Abhängigkeit von anderer Software installierten Pakete beibehalten und immer auf das Repository zurückstufen? ggf. Version.

Ich möchte dies tun, um eine aufgeräumte Python-Umgebung für das System zu haben und meine Änderungen nur in virtuellen Umgebungen vorzunehmen.

Ist das ohne eine Neuinstallation des Systems möglich? Wie würde ich es angehen?

Byte Commander
quelle

Antworten:

5

Ich würde damit beginnen, die Python-Pakete aufzulisten, die von verwaltet werden apt-get(die Ausführung des folgenden Einzeilers dauert einige Sekunden, haben Sie etwas Geduld):

$ for pyfile in `ls /usr/lib/python2.7/dist-packages`; do dpkg -S "/usr/lib/python2.7/dist-packages/${pyfile}" | sed 's/:.*//g'; done | sort -u

Hinweis: Falls erforderlich, ersetzen Sie 2.7 durch die Python-Version, an der Sie interessiert sind.

Deinstallieren Sie anschließend die manuell installierten Pakete. Wenn Sie sich nicht sicher sind, welche Sie installiert haben, können Sie die Liste aller manuell installierten Pakete mit dem folgenden Befehl abrufen (siehe diese Frage ):

$ comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

Deinstallieren Sie anschließend die Python-Pakete, die Sie manuell installiert haben. Beispiel:

$ sudo apt-get remove python-tk python-scipy

Als nächstes möchten Sie wissen, welche Pakete Sie mit pip installiert haben:

$ ls -ltd /usr/local/lib/python2.7/dist-packages/*

Dieser Befehl listet den Inhalt des Installationsverzeichnisses von pip nach dem Datum der letzten Änderung sortiert auf, damit Sie die Pakete, die Sie selbst installiert haben, leichter finden können. Zum Beispiel habe ich Googles installiertgcloud Tool installiert, mit dem eine Reihe von Pip-Paketen installiert werden, die ich nicht deinstallieren möchte. Wenn Sie jedoch die Liste durchsehen, können Sie leicht erkennen, dass alle zum gleichen Zeitpunkt installiert wurden lassen, und welche kann ich deinstallieren. Bevor Sie ein Pip-Paket deinstallieren, sollten Sie einen Snapshot der Liste der installierten Pakete erstellen:

$ sudo pip freeze > $HOME/pip_freeze_snapshot.txt

Dann deinstallieren Sie einfach die gewünschten Pakete, zum Beispiel:

$ sudo pip uninstall py pytest

Vergessen Sie nicht, dass möglicherweise einige Pip-Pakete in Ihrem Benutzerverzeichnis installiert wurden. Vielleicht sind Sie damit einverstanden, aber wenn nicht, können Sie sie auflisten:

$ ls -ltd $HOME/.local/lib/python2.7/site-packages/*

Wenn Sie all diese Pakete entfernen möchten, können Sie dieses Verzeichnis einfach löschen. Andernfalls deinstallieren Sie einfach die einzelnen Pakete, zum Beispiel:

$ pip uninstall tensorflow

Vergessen Sie nicht, nach anderen Python-Versionen zu suchen (z. B. 3.5).

MiniQuark
quelle
Ich würde eine öffentliche Sicherheitsankündigung empfehlen, die besagt, dass das Entfernen von zu vielen Paketen Ihr System lahm legen kann. Ansonsten ist dies ein hervorragender Leitfaden. (Zum Beispiel, ich war froh , dass ich mvnicht rmauf meiner , /usr/local/lib/python3.6weil ich ein paar Minuten später entdeckt , dass ich für ziemlich grundlegende Systemfunktionen gibt einige Dinge benötigt.
CrAq