Reinstalar / Atualizar todos os pacotes do site do usuário python e não os pacotes globais do Ubuntu

0

Quando instalei o Ubuntu pela primeira vez (16.04 LTS), não percebi que (em geral) não é uma boa idéia instalar pacotes python através de pip usando sudo :

sudo pip install mypackage

Mas, sempre que eu queria instalar um pacote sem sudo , eu obtinha permissão negada.

Agora, percebo que deveria ter acabado de instalar a maioria / todos esses pacotes usando o sinalizador --user :

pip install --user mypackage

que impedirá qualquer pacote de executar código indesejado no meu computador com privilégios de root. (Eu também agora tenho uma configuração de ambiente melhor usando virtualenv e similares).

No entanto, ainda tenho muitos pacotes instalados com pip , que gostaria de reinstalar como usuário, em vez de root. Mas, como eu entendo, o Ubuntu tem alguns pacotes python que ele instalou por padrão (através de apt-get , mas estes ainda estão listados e podem ser removidos por pip ). Então, minha pergunta é: como posso remover (e reinstalar) todos os pacotes que eu instalei sem estragar os que o Ubuntu usa?

    
por Daniel Hathcock 11.08.2017 / 04:43

1 resposta

2

caminho correto

Crie uma lista de todos os pacotes python:

pip list --format=legacy | awk '{print $1}' | sed 's/.*/\L&/' | sort  > /tmp/list.pip

crie uma lista de todos esses pacotes que foram instalados por apt :

cat /tmp/list.pip | sed 's/.*/\L&/' | 
xargs -Ipkg dpkg -l python-pkg python3-pkg pkg |& grep ^ii |
 awk '{print $2}' | sed -r s/^python3?-// | sort | uniq > /tmp/list.apt

Agora chegamos à lista de pacotes python, /tmp/list.pip que pip é capaz de remover e /tmp/list.apt que são pacotes instalados por apt , verifique-os manualmente e remova os que não estão em /tmp/apt.list .

Por causa da convenção de nomenclatura diferente entre apt e pip, a solução abaixo não está funcionando corretamente . Vou consertar isso mais tarde ...

Finalmente, obtenha uma lista de todos os pacotes que foram instalados apenas por pip e não apt (os pacotes existem no arquivo /tmp/list.pip , mas não em /tmp/list.apt ):

comm /tmp/list.apt /tmp/list.pip -3 > /tmp/list_toRemove

Em seguida, use o conteúdo /tmp/list_toRemove para remover ou atualizar seus pacotes pip .

Por exemplo, para removê-los tudo o que você pode executar:

pip uninstall $(cat /tmp/list_toRemove)

e reinstalá-los:

pip install $(cat /tmp/list_toRemove) --user

caminho errado

Usando comandos como:

pip list --user
pip list --local
pip freeze --user
pip freeze --local

também inclui pacotes instalados por apt de caminhos específicos, portanto, não use esses comandos.

    
por Ravexina 11.08.2017 / 06:45