Omitir la solicitud de confirmación para la desinstalación de pip

86

Estoy tratando de desinstalar todos los paquetes de django en mi entorno de superusuario para asegurarme de que todas mis dependencias de aplicaciones web estén instaladas en mi virtualenv.

sudo su
sudo pip freeze | grep -E '^django-' | xargs pip -q uninstall

Pero pip quiere confirmar la desinstalación de cada paquete, y no parece haber una -yopción para pip. ¿Existe una mejor manera de desinstalar un lote de módulos de Python? ¿Es rm -rf .../site-packages/una forma adecuada de hacerlo? ¿Existe una alternativa de easy_install?

Alternativamente, ¿sería mejor forzar a pip a instalar todas las dependencias en virtualenv en lugar de depender de los módulos de Python del sistema para cumplir con esas dependencias, por ejemplo pip --upgrade install, pero forzando incluso a que se instalen versiones igualmente antiguas para anular cualquier módulo del sistema? Intenté activar mi virtualenv y luego pip install --upgrade -r requirements.txtparece que instala las dependencias, incluso las que existen en la ruta de mi sistema, pero no puedo estar seguro si eso es porque los módulos de mi sistema eran viejos. Y man pipno parece garantizar este comportamiento (es decir, instalar la misma versión de un paquete que ya existe en los paquetes del sitio del sistema).

encimeras
fuente

Respuestas:

197

comenzando con la versión 7.1.2 de pip puede ejecutar pip uninstall -y <python package(s)>

pip uninstall -y package1 package2 package3

o del archivo

pip uninstall -y -r requirements.txt
gbozee
fuente
65

Pip NO incluye una opción --yes (a partir de la versión 1.3.1 de pip).

SOLUCIÓN ALTERNATIVA: ¡Di sí!

$ sudo ls  # enter pw so not prompted again
$ /usr/bin/yes | sudo pip uninstall pymongo
Kevin J. Rice
fuente
2
ahh, que simple. gracias por el recordatorio del programa Unix. yeses tan útil.
placas
pero no creo que esto funcione (demasiado tímido para probarlo en mi sistema hoy). yes | sudo pip freeze | grep -E '^django-' | xargs pip -q uninstalldebido a que los yesES serían tragados por el pip freezeno al xargsargumento / comando, pip uninstall.
placas
3
pip freeze > all_to_uninstall.txt yes | pip uninstall -r all_to_uninstall.txt
Nick
8

Si desea desinstalar todos los paquetes de requirements.txt,

pip uninstall -y -r requirements.txt
akilesh raj
fuente
1

Alternativamente, ¿sería mejor forzar a pip a instalar todas las dependencias en virtualenv en lugar de depender de los módulos de Python del sistema para cumplir con esas dependencias?

Si. No se meta demasiado con los paquetes instalados del sistema incorporado. Muchos de los paquetes del sistema, particularmente en OS X (incluso debian y las variedades derivadas) dependen demasiado de ellos.

pip --upgrade install, pero obligando a instalar incluso versiones igualmente antiguas para anular cualquier módulo del sistema.

No debería ser un gran problema si hay algunos paquetes más instalados dentro del venv que ya están en el paquete del sistema, especialmente si son de una versión diferente. Ese es el objetivo de virtualenv.

Intenté activar mi virtualenv y luego pip install --upgrade -r requirements.txt y eso parece instalar las dependencias, incluso las que existen en la ruta de mi sistema, pero no puedo estar seguro si eso es porque los módulos de mi sistema eran antiguos. Y man pip no parece garantizar este comportamiento (es decir, instalar la misma versión de un paquete que ya existe en los paquetes del sitio del sistema).

No, no instala los paquetes que ya existen en la instalación principal a menos que haya usado la --no-site-packagesbandera para crearlo, o las versiones requeridas y actuales sean diferentes.

Lakshman Prasad
fuente
1

Lakshman Prasad tenía razón pip --upgradey / o virtualenv --no-site-packageses el camino a seguir. Desinstalar los módulos de Python en todo el sistema es malo.

La --upgradeopción de pip instala los módulos requeridos en el entorno virtual, incluso si ya existen en el entorno del sistema, e incluso si la versión requerida o la última versión disponible es la misma que la versión del sistema.

pip --upgrade install

Y, el uso de la opción --no-site-packages al crear el entorno virtual garantiza que las dependencias faltantes no puedan enmascararse por la presencia de módulos faltantes en la ruta del sistema. Esto ayuda a exponer problemas durante la migración de un módulo de un paquete a otro, por ejemplo, pinax.apps.groups -> django-groups, especialmente cuando el problema es con declaraciones de carga de templatetags en django que buscan todos los módulos disponibles para directorios de templatetags y las definiciones de etiquetas dentro.

encimeras
fuente
0
pip install -U xxxx 

puede omitir confirmar

Prime Lee
fuente
2
Intente escribir oraciones completas y significativas y editar las partes del código.
YesThatIsMyName