Cómo desinstalar un paquete instalado con pip install --user
Hay una --user
opció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. Intenté ejecutar este comando:
pip uninstall --user [python-package-name]
Pero obtuve:
no such option: --user
¿Cómo puedo desinstalar un paquete que instalé con pip install --user
, además de buscarlo y eliminarlo manualmente?
he encontrado este articulo
pip no se puede desinstalar del directorio de paquetes de sitio por usuario
que describe que no se admite la desinstalación de paquetes del directorio de usuarios. 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é pasaría si se instalara el mismo paquete en todo el sistema y por usuario? ¿Qué pasa si alguien necesita dirigirse a un directorio de usuarios específico?
Habiendo probado esto usando Python 3.5 y pip 7.1.2 en Linux, la situación parece ser la siguiente:
pip install --user somepackage
Se instala en$HOME/.local
, y su desinstalación funciona mediantepip uninstall somepackage
.Esto es cierto independientemente de que
somepackage
esté instalado o no en todo el sistema al mismo tiempo.Si el paquete está instalado en ambos lugares, solo se desinstalará el local. Para desinstalar el paquete en todo el sistema usando
pip
, primero desinstálelo localmente y luego ejecute el mismo comando de desinstalación nuevamente, conroot
privilegios.Además del directorio de instalación del usuario predefinido,
pip install --target somedir somepackage
el paquete se instalará ensomedir
. No hay forma de desinstalar un paquete de ese lugar usandopip
. (Pero hay una solicitud de extracción no fusionada algo antigua en Github que implementapip uninstall --target
).Dado que los únicos lugares
pip
desde los que se desinstalará son todo el sistema y el usuario local predefinido, debe ejecutarlopip uninstall
como el usuario respectivo para desinstalar desde el directorio de instalación local de un usuario determinado.
Ejemplo para desinstalar el paquete 'oauth2client' en MacOS:
pip uninstall oauth2client
Sin embargo, tengan cuidado aquellos que lo utilizan 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 y luego usar el ejecutable correspondiente python
para pip
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: --user
no es válido dentro de un entorno virtual pip
, ya que la ubicación de un usuario realmente no tiene sentido para un entorno virtual.
Le recomiendo encarecidamente que utilice entornos virtuales para la instalación del paquete Python. Con virtualenv, evita cualquier conflicto de paquetes y el aislamiento total de los comandos de su área de usuario relacionados con Python.
Para eliminar todos los paquetes instalados globalmente, siga esto;
Es posible desinstalar paquetes instalados con --user
flag. Este funcionó para mí;
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 un Python limpio) puedes eliminarlos con;
pip uninstall setuptools && pip uninstall pip
Ahora tienes un entorno Python limpio. Puede crear virtualenv e instalar el paquete dentro de ellos.
La respuesta aún no es posible . Tienes que eliminarlo manualmente.