Como desinstalar um pacote instalado com o pip install --user

219

Existe uma --useropção para o pip que pode instalar um pacote Python por usuário:

pip install --user [python-package-name]

Usei esta opção para instalar um pacote em um servidor para o qual não tenho acesso root. O que eu preciso agora é desinstalar o pacote instalado no usuário atual. Eu tentei executar este comando:

pip uninstall --user [python-package-name]

Mas eu tenho:

no such option: --user

Como posso desinstalar um pacote com o qual instalei pip install --user, além de encontrar e excluir manualmente o pacote?

Encontrei este artigo

O pip não pode desinstalar do diretório de pacotes de sites por usuário

que descreve que a desinstalação de pacotes do diretório do usuário não é suportada. Segundo o artigo, se foi implementado corretamente, então com

pip uninstall [package-name]

o pacote que foi instalado também será pesquisado nos diretórios do usuário. Mas um problema ainda permanece para mim. E se o mesmo pacote fosse instalado em todo o sistema e por usuário? E se alguém precisar segmentar um diretório de usuário específico?

Serjik
fonte
1
Não, você precisa definir um virtualenv por usuário: grupo e conceder permissões de sistema adequadas à pasta que o contém.
Danius 29/10/2015
3
Não há como instalar um pacote em todo o sistema para todos os usuários e desinstalá-lo seletivamente para alguns usuários. Se o pacote foi instalado --user, a desinstalação sem o --userfará o que você deseja.
Tripleee
@tripleee: eu não tenho permissão sistema de largura e não quero, eu só preciso desinstalá-lo por usuário atual
Serjik
1
Descubra qual diretório você não tem permissões para remover e corrija suas permissões ou mova-o manualmente para o lado.
Tripleee

Respostas:

196

Depois de testar isso usando Python 3.5 e pip 7.1.2 no Linux, a situação parece ser a seguinte:

  • pip install --user somepackageinstala $HOME/.locale desinstalar funciona usando pip uninstall somepackage.

  • Isso ocorre se o somepackagesistema também está instalado ou não ao mesmo tempo.

  • Se o pacote estiver instalado nos dois locais, apenas o local será desinstalado. Para desinstalar o pacote em todo o sistema pip, primeiro desinstale-o localmente e, em seguida, execute o mesmo comando de desinstalação novamente, com rootprivilégios.

  • Além do diretório de instalação do usuário predefinido, pip install --target somedir somepackageo pacote será instalado somedir. Não há como desinstalar um pacote desse local usando pip. (Mas há uma solicitação de pull imersa um tanto antiga no Github que é implementada pip uninstall --target.)

  • Como os únicos locais a serem pipdesinstalados são em todo o sistema e local do usuário predefinido, você precisa executar pip uninstallcomo o respectivo usuário para desinstalar do diretório de instalação local de um determinado usuário.

Thomas Lotze
fonte
2
Essas instruções são precisas para executar o pip dentro de um ambiente virtual?
kbolino 24/07/19
no meu caso, a desinstalação não funcionou para o pacote pip 9.0.1 ainda está instalado em HOME /./ local
Genom
2
O ponto 2 não parece ser verdade no meu sistema. Eu tenho um pacote de sistema jediinstalado no /usr/lib64/python2.7/site-packages/. Quando eu faço, como um usuário normal: pip install --user jedi e pip uninstall jedi, em seguida , o pip tenta desinstalar /usr/lib64/python2.7/site-packages/jedie, em seguida, inicia Permission denied. Portanto, se --usernão existir para o comando de desinstalação, como eu digo para desinstalar para não tentar desinstalar, /usr/lib64/python2.7/site-packages/jedimas ~/.local/lib64/python3.6/site-packages/jedi?
AstroFloyd #
Exatamente o mesmo aqui que @AstroFloyd
Nikana Reklawyks
28

Exemplo para desinstalar o pacote 'oauth2client' no MacOS:

pip uninstall oauth2client
Huy - Logarit
fonte
9

Tenha cuidado, porém, para aqueles que usam pip install --user some_pkg dentro de um ambiente virtual .

$ path/to/python -m venv ~/my_py_venv
$ source ~/my_py_venv/bin/activate
(my_py_venv) $ pip install --user some_pkg
(my_py_venv) $ pip uninstall some_pkg
WARNING: Skipping some_pkg as it is not installed.
(my_py_venv) $ pip list
# Even `pip list` will not properly list the `some_pkg` in this case

Nesse caso, você deve desativar o ambiente virtual atual e , em seguida, usar o correspondente python/ pipexecutável para listar ou desinstalar os pacotes do site do usuário:

(my_py_venv) $ deactivate
$ path/to/python -m pip list
$ path/to/python -m pip uninstall some_pkg

Observe que esse problema foi relatado alguns anos atrás . E parece que a conclusão atual é: --usernão é válida dentro de um ambiente virtual pip, pois a localização de um usuário não faz realmente sentido para um ambiente virtual.

YaOzI
fonte
3
Tarde demais !, eu usei --userno interior do env virtual, há alguma maneira de reverter isso ?, porque pip listnão trabalho ....
jnfran92
2
"E parece que a conclusão atual é: --user não é válido dentro do pip de um ambiente virtual, pois a localização de um usuário não faz realmente sentido para um ambiente virtual". Acordado. As instalações do usuário anulam todo o propósito de um ambiente virtual. Infelizmente, existem muitos exemplos ruins de pessoas fazendo isso por aí.
Stephen Bosch
5

Eu acho que é possível desinstalar os pacotes instalados com o --userflag. Este funcionou para mim;

pip freeze --user | xargs pip uninstall -y

Para python 3;

pip3 freeze --user | xargs pip3 uninstall -y

Mas, de alguma forma, esses comandos não desinstalam o setuptools e o pip. Após esses comandos (se você realmente deseja um python limpo), você pode excluí-los;

pip uninstall setuptools && pip uninstall pip

thiras
fonte
2
Esta é uma solução elegante que funcionou bem para mim.
Stephen Bosch
2

A resposta ainda não é possível . Você precisa removê-lo manualmente.

sorin
fonte
Ao instalar um pacote, houve um retorno. A desinstalação nunca funcionou depois disso.
21817 syam
Como faço para listar todos os arquivos pip instalados para um determinado pacote (para que eu possa removê-los)?
AstroFloyd #
É efetivamente impossível porque o pip executa o setup.py, que executa o código externo. Até que o setup.py seja totalmente removido, esqueça-o, provavelmente em 2022 será.
Sorin
2

Como o @ thomas-lotze mencionou, atualmente o pip tooling não faz isso, pois não existe a opção --user correspondente. Mas o que eu acho é que posso fazer check-in ~ / .local / bin e procurar o pip #. # Específico que me parece que corresponde à opção --user.

No meu caso:

antho@noctil: ~/.l/bin$ pwd
/home/antho/.local/bin
antho@noctil: ~/.l/bin$ ls pip*
pip  pip2  pip2.7  pip3  pip3.5

E então desinstale com a versão específica do pip.

AnthonyC
fonte
stackoverflow.com/a/11250821/14420 ver receita para a desinstalação de banho, por exemplo, ./pip2 freeze | grep -v "^-e" | xargs pip uninstall -ypara tudo, exceto os pacotes instalados no modo editável
Matt Wilkie
0

Estou executando o Anaconda versão 4.3.22 e um ambiente python3.6.1, e tive esse problema. Aqui está a história e a correção:

pip uninstall opencv-python # -- the original step. failed.

ImportError: DLL load failed: The specified module could not be found.

Fiz isso no meu ambiente python3.6 e recebi esse erro.

python -m pip install opencv-python # same package as above.
conda install -c conda-forge opencv # separate install parallel to opencv
pip-install opencv-contrib-python # suggested by another user here. doesn't resolve it.

Em seguida, tentei baixar o python3.6 e colocar o python3.dll na pasta e em várias pastas. nada mudou.

finalmente, isso corrigiu:

pip uninstall opencv-python

(a outra versão do conda-forge ainda está instalada) Isso deixou apenas a versão do conda e funciona na 3.6.

>>>import cv2
>>>

trabalhando!

Marc Maxmeister
fonte