Restaure a instalação do Python para as dependências de pacote padrão plus apt

8

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

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

Eu 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?

    
por Byte Commander 17.09.2015 / 11:05

1 resposta

5

Eu começaria listando os pacotes do Python gerenciados por apt-get (o seguinte one-liner 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 o 2.7 por qualquer versão do Python em que você esteja interessado.

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

$ 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 do Python que você instalou manualmente, por exemplo:

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

Em seguida, você quer 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 instalados. Por exemplo, eu instalei a ferramenta gcloud do Google, que instala um monte de pacotes pip que eu não quero desinstalar, mas, olhando pela lista, é fácil ver que todos eles foram instalados no mesmo horário exato, então eu sei qual aqueles que eu deveria deixar, e quais eu posso desinstalar. Antes de desinstalar qualquer pacote pip, você deve tirar um instantâneo 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

Finalmente, não esqueça que alguns pacotes pip podem ter sido instalados em seu diretório de usuários. 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 esse diretório. Caso contrário, apenas desinstale os pacotes individuais, por exemplo:

$ pip uninstall tensorflow

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

    
por MiniQuark 12.05.2017 / 22:31