Cómo desinstalar un paquete instalado con pip install --user

219

Hay una --useropción para pip que puede instalar un paquete de Python por usuario:

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

Utilicé esta opción para instalar un paquete en un servidor para el que no tengo acceso de root. Lo que necesito ahora es desinstalar el paquete instalado en el usuario actual. Traté de ejecutar este comando:

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

Pero tengo:

no such option: --user

¿Cómo puedo desinstalar un paquete que instalé pip install --user, además de buscar y eliminar manualmente el paquete?

He encontrado este articulo

pip no se puede desinstalar del directorio de paquetes de sitio por usuario

que describe que desinstalar paquetes del directorio de usuarios no es compatible. Según el artículo, si se implementó correctamente, entonces con

pip uninstall [package-name]

el paquete que se instaló también se buscará en los directorios de usuarios. Pero todavía me queda un problema. ¿Qué sucede si se instaló el mismo paquete tanto en todo el sistema como por usuario? ¿Qué sucede si alguien necesita apuntar a un directorio de usuarios específico?

Serjik
fuente
1
No, debe establecer un virtualenv por usuario: grupo y otorgar los permisos del sistema adecuados a la carpeta que lo contiene.
danius
3
No hay forma de instalar un paquete en todo el sistema para todos los usuarios y luego desinstalarlo selectivamente para algunos usuarios. Si el paquete se instaló como --userentonces, desinstalar sin --userhará lo que desee.
tripleee
@tripleee: no tengo permisos en todo el sistema y no quiero, solo necesito desinstalarlo por usuario actual
Serjik
1
Averigua qué directorio no tienes permisos para eliminar y corrige sus permisos, o muévelo manualmente a un lado.
tripleee
1
Relacionado: pip no desinstala paquetes fuera de sys.prefix
Piotr Dobrogost

Respuestas:

196

Habiendo probado esto usando Python 3.5 y pip 7.1.2 en Linux, la situación parece ser esta:

  • pip install --user somepackageinstala $HOME/.localy desinstalarlo funciona usando pip uninstall somepackage.

  • Esto es cierto si somepackagese instala o no en todo el sistema al mismo tiempo.

  • Si el paquete se instala en ambos lugares, solo se desinstalará el local. Para desinstalar el paquete usando todo el sistema pip, primero desinstálelo localmente, luego ejecute el mismo comando de desinstalación nuevamente, con rootprivilegios.

  • Además del directorio de instalación de usuario predefinido, pip install --target somedir somepackageinstalará el paquete en somedir. No hay forma de desinstalar un paquete de ese lugar usando pip. (Pero hay una solicitud de extracción no fusionada algo antigua en Github que se implementa pip uninstall --target).

  • Dado que los únicos lugares pipdesde los que se desinstalará son los de todo el sistema y los usuarios locales predefinidos, debe ejecutarse pip uninstallcomo el usuario respectivo para desinstalar desde el directorio de instalación local de un usuario determinado.

Thomas Lotze
fuente
2
¿Son precisas estas declaraciones para ejecutar pip dentro de un entorno virtual?
kbolino
en mi caso, la desinstalación no funcionó para el paquete pip 9.0.1 todavía está instalado en HOME /./ local
Genom
2
El punto 2 no parece ser cierto en mi sistema. Tengo un paquete de sistema jediinstalado /usr/lib64/python2.7/site-packages/. Cuando lo hago, como un usuario normal: pip install --user jedi y luego pip uninstall jedi, pip intenta desinstalar /usr/lib64/python2.7/site-packages/jediy luego se inicia Permission denied. Así que si --userno existe para el comando de desinstalación, ¿Cómo se desinstala digo no para tratar de desinstalar /usr/lib64/python2.7/site-packages/jedi, pero ~/.local/lib64/python3.6/site-packages/jedi?
AstroFloyd
Exactamente lo mismo aquí que @AstroFloyd
Nikana Reklawyks
28

ejemplo para desinstalar el paquete 'oauth2client' en MacOS:

pip uninstall oauth2client
Huy - Logarit
fuente
9

Sin embargo, tenga cuidado con aquellos que usan pip install --user some_pkg dentro de un entorno 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

En este caso, debe desactivar el entorno virtual actual , luego usar el correspondiente python/ pipejecutable para enumerar o desinstalar los paquetes del sitio del usuario:

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

Tenga en cuenta que este problema se informó hace unos años . Y parece que la conclusión actual es: --userno es válida dentro de un entorno virtual pip, ya que la ubicación de un usuario realmente no tiene sentido para un entorno virtual.

YaOzI
fuente
3
Demasiado tarde !, he usado --userdentro del env virtual, ¿hay alguna manera de revertir eso ?, porque pip listqué no funciona ....
jnfran92
2
"Y parece que la conclusión actual es: - el usuario no es válido dentro del pip de un entorno virtual, ya que la ubicación de un usuario realmente no tiene sentido para un entorno virtual". Convenido. Las instalaciones del usuario anulan todo el propósito de un entorno virtual. Desafortunadamente, hay muchos malos ejemplos de personas que hacen esto por ahí.
Stephen Bosch
5

Creo que es posible desinstalar paquetes instalados con --userflag. Este me funcionó;

pip freeze --user | xargs pip uninstall -y

Para python 3;

pip3 freeze --user | xargs pip3 uninstall -y

Pero de alguna manera estos comandos no desinstalan setuptools y pip. Después de esos comandos (si realmente quieres una pitón limpia) puedes eliminarlos con;

pip uninstall setuptools && pip uninstall pip

Thiras
fuente
2
Esta es una solución elegante que funcionó bien para mí.
Stephen Bosch
2

La respuesta aún no es posible . Tienes que eliminarlo manualmente.

Sorin
fuente
Al instalar un paquete, hubo un rastreo. Desinstalar nunca funcionó después de eso.
syam
¿Cómo enumero todos los archivos pip instalados para un paquete determinado (para poder eliminarlos)?
AstroFloyd
Efectivamente es imposible porque pip ejecuta setup.py que ejecuta código externo. Hasta que setup.py se elimine por completo, olvídalo, probablemente para 2022 lo estará.
sorin
2

Como @ thomas-lotze ha mencionado, actualmente las herramientas de pip no lo hacen, ya que no hay una opción de usuario correspondiente. Pero lo que encuentro es que puedo registrar ~ / .local / bin y buscar el pip #. # Específico que me parece que corresponde a la opción --user.

En mi caso:

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

Y luego simplemente desinstale con la versión específica de pip.

AnthonyC
fuente
stackoverflow.com/a/11250821/14420 para ver la receta para la desinstalación del baño, por ejemplo, ./pip2 freeze | grep -v "^-e" | xargs pip uninstall -ypara todo excepto los paquetes instalados en modo editable
matt wilkie
0

Estoy ejecutando Anaconda versión 4.3.22 y un entorno python3.6.1, y tuve este problema. Aquí está la historia y la solución:

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

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

Hice esto en mi entorno python3.6 y obtuve este error.

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.

Luego, intenté descargar python3.6 y poner el python3.dll en la carpeta y en varias carpetas. nada ha cambiado.

finalmente, esto lo solucionó:

pip uninstall opencv-python

(la otra versión de conda-forge todavía está instalada) Esto dejó solo la versión de conda, y eso funciona en 3.6.

>>>import cv2
>>>

¡trabajando!

Marc Maxmeister
fuente