Restaurar a instalação do Python para o padrão, mais as dependências do pacote apt

14

Eu brinquei bastante com minhas instalações Python (2 e 3) e instalei vários pacotes, alguns usando apt-get, mas a maioria usando pip. Também atualizei muitos aptpacotes instalados pippara uma versão mais recente.

Minha pergunta é:
como posso reverter todas essas alterações, remover todos os pippacotes Python instalados e manter o conjunto padrão de pacotes pré-instalados em sua versão padrão do repositório, além dos instalados por apt-getmas apenas como dependência de outro software, sempre fazendo o downgrade para o repositório versão, se necessário.

Quero fazer isso para ter um ambiente Python arrumado para o sistema e ter minhas modificações apenas em virtualenvs.

Isso é possível sem a reinstalação do sistema? Como eu abordaria isso?

Byte Commander
fonte
Aqui está uma pergunta relacionada: Como eu detecto e removo pacotes Python instalados via pip?
Mxdsp

Respostas:

5

Eu começaria listando os pacotes Python gerenciados por apt-get (o linux a seguir leva alguns segundos para ser executado, seja paciente):

$ 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

Nota: se necessário, substitua 2.7 por qualquer versão python em que você esteja interessado.

Em seguida, desinstale os pacotes que você instalou manualmente. Se você não tiver certeza sobre quais você instalou, poderá obter a lista de todos os pacotes instalados manualmente usando o seguinte comando (consulte esta pergunta ):

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

Em seguida, desinstale os pacotes Python que você instalou manualmente, por exemplo:

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

Em seguida, você deseja saber quais pacotes você instalou usando o pip:

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

Este comando lista o conteúdo do diretório de instalação do pip classificado pela data da última modificação, facilitando a localização dos pacotes que você instalou. Por exemplo, eu instalei a gcloudferramenta do Google, que instala vários pacotes pip que eu não quero desinstalar, mas, olhando a lista, é fácil ver que todos eles foram instalados ao mesmo tempo, então sei quais devo sair e quais eu posso desinstalar. Antes de desinstalar qualquer pacote pip, você deve tirar uma captura instantânea da lista de pacotes instalados:

$ sudo pip freeze > $HOME/pip_freeze_snapshot.txt

Em seguida, basta desinstalar os pacotes que você deseja, por exemplo:

$ sudo pip uninstall py pytest

Por fim, não esqueça que alguns pacotes pip podem ter sido instalados no seu diretório de usuário. Talvez você esteja bem com isso, mas se não, você pode listá-los:

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

Se você quiser se livrar de todos esses pacotes, basta excluir este diretório. Caso contrário, basta desinstalar os pacotes individuais, por exemplo:

$ pip uninstall tensorflow

Não se esqueça de verificar outras versões do python (por exemplo, 3.5).

MiniQuark
fonte
Eu recomendaria um anúncio de segurança pública de que a remoção de muitos pacotes pode prejudicar o sistema, mas, caso contrário, este é um excelente guia. (Por exemplo, eu estava feliz que eu fiz mv, e não rmno meu /usr/local/lib/python3.6, porque eu descobri alguns minutos depois que eu precisava de algumas coisas lá para funções bastante básicos do sistema.
craq