python - instalar - ¿Cuál es la forma más fácil de eliminar todos los paquetes instalados por pip?
pip install django version (18)
Estoy intentando arreglar uno de mis virtualenvs. Me gustaría restablecer todas las bibliotecas instaladas de nuevo a las que coinciden con la producción.
¿Hay una manera rápida y fácil de hacer esto con pip?
En Command Shell de Windows, el comando
pip freeze | xargs pip uninstall -y
pip freeze | xargs pip uninstall -y
no funcionará. Así que para aquellos de ustedes que usan Windows, he descubierto una forma alternativa de hacerlo.
- Copie todos los nombres de los paquetes instalados de pip desde el comando
pip freeze
a un archivo .txt . - Luego, vaya a la ubicación de su archivo .txt y ejecute el comando
pip uninstall -r *textfile.txt*
Método 1 (con pip freeze
)
pip freeze | xargs pip uninstall -y
Método 2 (con pip list
)
pip list | awk ''{print $1}'' | xargs pip uninstall -y
Método 3 (con virtualenv
)
virtualenv --clear MYENV
Creo que esto funciona con lo último.
virtualenv --clear MYENV
En Windows, si su path
está configurada correctamente, puede usar:
pip freeze > unins && pip uninstall -y -r unins && del unins
Debería ser un caso similar para sistemas similares a Unix:
pip freeze > unins && pip uninstall -y -r unins && rm unins
Solo una advertencia de que esto no es completamente sólido ya que puede encontrarse con problemas como ''Archivo no encontrado'', pero aún así puede funcionar en algunos casos.
EDITAR: Para mayor claridad: unins
es un archivo arbitrario que tiene datos escritos cuando este comando se ejecuta: pip freeze > unins
El archivo que escribió a su vez se usa para desinstalar los paquetes mencionados anteriormente con consentimiento implícito / aprobación previa a través de pip uninstall -y -r unins
El archivo finalmente se elimina al finalizar.
En mi caso, accidentalmente instalé varios paquetes a nivel mundial utilizando un pip
instalado por Homebrew en macOS. La forma más fácil de revertir a los paquetes predeterminados fue una simple:
$ brew reinstall python
O, si estabas usando pip3
:
$ brew reinstall python3
Es una pregunta antigua que conozco, pero la encontré, así que para futuras referencias ahora puedes hacer esto:
pip uninstall [options] <package> ...
pip uninstall [options] -r <requirements file> ...
-r, - archivo de requisitos
Desinstale todos los paquetes listados en el archivo de requisitos dado. Esta opción se puede utilizar varias veces.
De la documentación de pip versión 8.1.
Esta fue la forma más fácil para que desinstalé todos los paquetes de Python.
from pip import get_installed_distributions
from os import system
for i in get_installed_distributions():
system("pip3 uninstall {} -y -q".format(i.key))
Este es el comando que funciona para mí:
pip list | awk ''{print $1}'' | xargs pip uninstall -y
Esto funcionará para todos los sistemas Mac, Windows y Linux. Para obtener la lista de todos los paquetes pip en el archivo Requirements.txt (Nota: Esto sobrescribirá Requirements.txt si existe otra cosa creará uno nuevo).
pip freeze > requirements.txt
Ahora para eliminar uno por uno
pip uninstall -r requirements.txt
Si queremos eliminar todo de una vez entonces
pip uninstall -r requirements.txt -y
Si está trabajando en un proyecto existente que tiene un archivo requirements.txt
y su entorno se ha desviado, simplemente reemplace los requirements.txt
de los ejemplos anteriores con toberemoved.txt
. Luego, una vez que haya seguido los pasos anteriores, puede usar el requirements.txt
Requirements.txt para actualizar su entorno ahora limpio.
Y para un solo comando sin crear ningún archivo (como sugirió joeb).
pip uninstall -y -r <(pip freeze)
He encontrado este fragmento como una solución alternativa. Es una eliminación más elegante de las bibliotecas que rehacer el virtualenv:
pip freeze | xargs pip uninstall -y
En caso de que tenga paquetes instalados a través de VCS, debe excluir esas líneas y eliminar los paquetes manualmente (elevado de los comentarios a continuación):
pip freeze | grep -v "^-e" | xargs pip uninstall -y
La forma más rápida es rehacer el virtualenv completamente. Supongo que tiene un archivo Requirements.txt que coincide con la producción, si no:
# On production:
pip freeze > reqs.txt
# On your machine:
rmvirtualenv MYENV
mkvirtualenv MYENV
pip install -r reqs.txt
Otras respuestas que usan pip list
o pip freeze
deben incluir --local
contrario, también desinstalará los paquetes que se encuentran en los espacios de nombres comunes.
Así que aquí están los fragmentos que uso regularmente
pip freeze --local | xargs pip uninstall -y
o
pip list --local | py -x "print(x.split()[0])" | xargs pip uninstall -y
Obtenga más información sobre este comportamiento emitiendo pip freeze --help
Para usuarios de Windows, esto es lo que uso en Windows PowerShell
pip uninstall -y (pip freeze)
Pip no tiene forma de saber qué paquetes instaló y qué paquetes instaló el administrador de paquetes de su sistema. Para esto necesitarías hacer algo como esto.
para las distribuciones basadas en rpm (reemplace python2.7 con su versión de python con la que instaló pip):
find /usr/lib/python2.7/ |while read f; do
if ! rpm -qf "$f" &> /dev/null; then
echo "$f"
fi
done |xargs rm -fr
para una distribución basada en deb:
find /usr/lib/python2.7/ |while read f; do
if ! dpkg-query -S "$f" &> /dev/null; then
echo "$f"
fi
done |xargs rm -fr
Luego, para limpiar los directorios vacíos que sobran:
find /usr/lib/python2.7 -type d -empty |xargs rm -fr
Encontré que la respuesta principal es muy engañosa, ya que eliminará todos los paquetes de python (¿la mayoría?) De su distribución y probablemente lo dejará con un sistema dañado.
Quería elevar esta respuesta de una sección de comentarios porque es una de las soluciones más elegantes en el hilo. El crédito completo para esta respuesta va a joeb .
pip uninstall -y -r <(pip freeze)
Esto me funcionó muy bien para el caso de uso de borrar la carpeta de mis paquetes de usuario fuera del contexto de un virtualenv que muchas de las respuestas anteriores no manejan.
Edición: ¿Alguien sabe cómo hacer que este comando funcione en un Makefile?
Bonus: un alias de bash
Agrego esto a mi perfil de bash para mayor comodidad:
alias pipuninstallall="pip uninstall -y -r <(pip freeze)"
Entonces corre:
pipuninstallall
Alternativa para pipenv
Si estás usando pipenv puedes simplemente ejecutar:
pipenv uninstall --all
Si estás ejecutando virtualenv
:
virtualenv --clear </path/to/your/virtualenv>
por ejemplo, si su virtualenv es /Users/you/.virtualenvs/projectx
, entonces ejecutaría:
virtualenv --clear /Users/you/.virtualenvs/projectx
Si no sabe dónde se encuentra su entorno virtual, puede ejecutar which python
desde un entorno virtual activado para obtener la ruta.
Soporte multiplataforma utilizando solo pip
:
#!/usr/bin/env python
from sys import stderr
from pip.commands.uninstall import UninstallCommand
from pip import get_installed_distributions
pip_uninstall = UninstallCommand()
options, args = pip_uninstall.parse_args([
package.project_name
for package in
get_installed_distributions()
if not package.location.endswith(''dist-packages'')
])
options.yes = True # Don''t confirm before uninstall
# set `options.require_venv` to True for virtualenv restriction
try:
print pip_uninstall.run(options, args)
except OSError as e:
if e.errno != 13:
raise e
print >> stderr, "You lack permissions to uninstall this package.
Perhaps run with sudo? Exiting."
exit(13)
# Plenty of other exceptions can be thrown, e.g.: `InstallationError`
# handle them if you want to.