Przywróć instalację Pythona do domyślnych plus zależności pakietu apt

14

Dużo grałem z moimi instalacjami w Pythonie (2 i 3) i zainstalowałem kilka pakietów, niektóre używają apt-get, ale większość używa pip. aptZaktualizowałem także wiele zainstalowanych pakietów pipdo nowszej wersji.

Moje pytanie brzmi: w
jaki sposób mogę cofnąć wszystkie te zmiany, usunąć wszystkie pipzainstalowane pakiety Pythona i po prostu zachować domyślny zestaw wstępnie zainstalowanych pakietów w ich domyślnej wersji repozytorium, plus te zainstalowane przez, apt-getale tylko jako zależność od innego oprogramowania, zawsze obniżając wersję do repozytorium wersja, jeśli to konieczne.

Chcę to zrobić, aby mieć uporządkowane środowisko Pythona dla systemu i mieć moje modyfikacje tylko w virtualenvs.

Czy to możliwe bez ponownej instalacji systemu? Jak do tego podejdę?

Bajt Dowódca
źródło

Odpowiedzi:

5

Zacznę od listy pakietów Pythona zarządzanych przez apt-get(uruchomienie jednego linijki zajmuje kilka sekund, bądź cierpliwy):

$ 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

Uwaga: w razie potrzeby zamień 2.7 na dowolną wersję Pythona, którą jesteś zainteresowany.

Następnie odinstaluj pakiety zainstalowane ręcznie. Jeśli nie masz pewności, które z nich zainstalowałeś, możesz uzyskać listę wszystkich pakietów zainstalowanych ręcznie za pomocą następującego polecenia (zobacz to pytanie ):

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

Następnie odinstaluj pakiety Pythona, które zainstalowałeś ręcznie, na przykład:

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

Następnie chcesz wiedzieć, które pakiety zainstalowałeś za pomocą pip:

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

To polecenie wyświetla zawartość katalogu instalacyjnego pip posortowanego według daty ostatniej modyfikacji, co ułatwia znalezienie pakietów, które sam zainstalowałeś. Na przykład zainstalowałem gcloudnarzędzie Google, które instaluje kilka pakietów pip, których nie chcę odinstalować, ale przeglądając listę, łatwo zauważyć, że wszystkie zostały zainstalowane w tym samym czasie, więc wiem, które z nich powinienem odejść i które mogę odinstalować. Przed odinstalowaniem dowolnego pakietu pip należy wykonać migawkę listy zainstalowanych pakietów:

$ sudo pip freeze > $HOME/pip_freeze_snapshot.txt

Następnie po prostu odinstaluj potrzebne pakiety, na przykład:

$ sudo pip uninstall py pytest

Na koniec nie zapominaj, że niektóre pakiety pip mogły zostać zainstalowane w twoim katalogu użytkownika. Być może nie masz nic przeciwko, ale jeśli nie, możesz wymienić je:

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

Jeśli chcesz pozbyć się wszystkich tych pakietów, możesz po prostu usunąć ten katalog. W przeciwnym razie po prostu odinstaluj poszczególne pakiety, na przykład:

$ pip uninstall tensorflow

Nie zapomnij sprawdzić innych wersji Pythona (np. 3.5).

MiniQuark
źródło
Polecam publiczne ogłoszenie bezpieczeństwa, że ​​usunięcie zbyt wielu pakietów może uszkodzić twój system, ale w przeciwnym razie jest to doskonały przewodnik. (Na przykład cieszyłem się, że to zrobiłem, mva nie rmna sobie, /usr/local/lib/python3.6ponieważ kilka minut później odkryłem, że potrzebowałem tam pewnych rzeczy do dość podstawowych funkcji systemu.
craq