Восстановить установку Python по умолчанию плюс apt зависимости пакета

14

Я много играл с моими установками Python (2 и 3) и установил кучу пакетов, некоторые из которых используют apt-get, но большинство используют pip. Я также обновил много установленных aptпакетов pipдо более новой версии.

Мой вопрос:
как я могу отменить все эти изменения, удалить все установленные pipпакеты Python и просто сохранить набор предустановленных пакетов по умолчанию в их версии репозитория по умолчанию, плюс те, которые установлены, apt-getно только как зависимость от другого программного обеспечения, всегда понижая до репозитория версия при необходимости.

Я хочу сделать это, чтобы привести в порядок среду Python для системы и иметь свои модификации только в virtualenvs.

Это возможно без переустановки системы? Как бы я подошел к этому?

Byte Commander
источник

Ответы:

5

Я хотел бы начать с перечисления пакетов Python, которыми управляет apt-get(следующая строка занимает несколько секунд, будьте терпеливы):

$ 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

Примечание: при необходимости замените 2.7 на ту версию Python, которая вас интересует.

Затем удалите пакеты, которые вы установили вручную. Если вы не уверены, какие из них вы установили, вы можете получить список всех пакетов, установленных вручную, с помощью следующей команды (см. Этот вопрос ):

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

Затем удалите пакеты Python, которые вы установили вручную, например:

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

Далее вы хотите узнать, какие пакеты вы установили с помощью pip:

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

Эта команда выводит содержимое каталога установки pip, отсортированного по дате последнего изменения, что упрощает поиск установленных вами пакетов. Например, я установил gcloudинструмент Google, который устанавливает несколько пакетов pip, которые я не хочу удалять, но просматривая список, легко увидеть, что все они были установлены в одно и то же время, поэтому я знаю, какие из них мне следует оставить, и какие из них я могу удалить. Перед удалением любого пакета pip вы должны сделать снимок списка установленных пакетов:

$ sudo pip freeze > $HOME/pip_freeze_snapshot.txt

Затем просто удалите нужные пакеты, например:

$ sudo pip uninstall py pytest

Наконец, не забывайте, что некоторые пакеты pip могут быть установлены в вашем пользовательском каталоге. Возможно, вы в порядке с этим, но если нет, вы можете перечислить их:

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

Если вы хотите избавиться от всех этих пакетов, вы можете просто удалить этот каталог. В противном случае просто удалите отдельные пакеты, например:

$ pip uninstall tensorflow

Не забудьте проверить наличие других версий Python (например, 3.5).

MiniQuark
источник
Я бы порекомендовал публичное объявление о том, что удаление слишком большого количества пакетов может нанести вред вашей системе, но в остальном это отличное руководство. (Например, я был рад, что я сделал это, mvа не rmна своем, /usr/local/lib/python3.6потому что через несколько минут я обнаружил, что мне нужны некоторые вещи для довольно простых системных функций.
craq