@patelshahrukh desinstalar python NO elimina los paquetes pip. favor EVITAR hacer eso, ya que tanto más probable es que no va a funcionar de la manera que creo que sí, y , dependiendo de la forma de instalar Python de nuevo, puede dejar el equipo en un estado inestable que es más trabajo para arreglar .
He encontrado este fragmento como una solución alternativa. Es una eliminación más elegante de bibliotecas que rehacer 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):
Considero que esta es una buena solución, simplemente porque no elimina por completo el entorno virtual; es posible que haya realizado cambios en, por ejemplo, los postactivateque permanecerán.
niceguydave
55
Después de ejecutar esto, me di cuenta de que eliminó el setuptoolspaquete. Resolví el problema siguiendo las instrucciones aquí: stackoverflow.com/questions/7446187/…
Dan
1
@ gerty3000 sí, esto (como pregunta la pregunta) eliminará todos los paquetes instalados en un entorno virtual. en su entorno, ¿tal vez sería mejor instalar setuptools en una ubicación global?
blueberryfields
77
También puede usar pip freeze --exclude-editable | xargs pip uninstall -ypara ignorar los paquetes de VCS sin usar un patrón grep
Esto funcionará para todos los sistemas Mac, Windows y Linux. Para obtener la lista de todos los paquetes de pip en el archivo require.txt (Nota: esto sobrescribirá a require.txt si existe, creará uno nuevo, también si no desea reemplazar los viejos requisitos.txt, entonces asigne un nombre de archivo diferente en todos los siguientes comandos en el lugar requisitos.txt).
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 requirements.txtarchivo y su entorno ha divergido, simplemente reemplace requirements.txtde los ejemplos anteriores con toberemoved.txt. Luego, una vez que haya seguido los pasos anteriores, puede usar requirements.txtpara actualizar su entorno ahora limpio.
Y para un solo comando sin crear ningún archivo (como sugirió @joeb).
En realidad, parece (por lo que acabo de encontrar), mientras wipeenvque dentro del entorno arroja un error y no elimina nada si se usa en el contexto de una pip install -ecompilación de desarrollo, intentar usar virtualenv --clear MYENVno arroja un error y no elimina ninguno de los paquetes que puede haber instalado previamente en el entorno. Al menos este es el caso en OSX. Ver bitbucket.org/dhellmann/virtualenvwrapper/issues/211/… para más información.
mpacer
2
wipeenves un alias proporcionado por virtualenvwrapper, por lo que no todos lo tienen.
Jonathan Hartley
2
bueno, este es un truco sucio, pero funciona como magia. Preferiría que todos usen la desinstalación de pip -r require.txt -y. Hace una gran limpieza.
Muema
84
Quería elevar esta respuesta de una sección de comentarios porque es una de las soluciones más elegantes del hilo. El crédito completo por esta respuesta va a @joeb .
pip uninstall -y -r <(pip freeze)
Esto funcionó muy bien para mí para el caso de uso de borrar mi carpeta de paquetes de usuario fuera del contexto de un virtualenv que muchas de las respuestas anteriores no manejan.
Editar: ¿Alguien sabe cómo hacer que este comando funcione en un Makefile?
Bonus: un alias bash
Agrego esto a mi perfil de bash por conveniencia:
alias pipuninstallall="pip uninstall -y -r <(pip freeze)"
Me gusta, pero no funciona en el caso nulo (no se pip freezegenera ningún resultado si no hay paquetes instalados y pip uninstall, lamentablemente, se queja).
Eric G
Hmm buena captura. Quizás podría incluirse en una función bash que verifique si la salida de congelación de pip no está vacía. No veo una gran manera de lograrlo mientras mantengo el comando como un breve resumen.
Taylor Edmiston
1
make usa sh por defecto, pero la sintaxis de sustitución <(...)es un bashism. Entonces puede usar bash -c "...", o trabajar haciendo unpip freeze | pip uninstall -r /dev/stdin
César
No funciona con los portátiles de Azure:ERROR: Cannot uninstall 'bitarray'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
SeaDude
54
Otras respuestas que usan pip listo pip freezedeben incluir--local más también desinstalarán los paquetes que se encuentran en los espacios de nombres comunes.
Así que aquí están los fragmentos que uso regularmente
Esto funcionó hasta que llegó a un paquete que produce este error: ERROR: Cannot uninstall 'bitarray'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.. Entonces no pude desinstalar más módulos.
SeaDude
39
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
sudo no es necesario, y probablemente sea peligroso de usar sin una cuidadosa consideración, ya que afecta la configuración global de la máquina. vea esta respuesta, por ejemplo: stackoverflow.com/questions/15028648/…
blueberryfields
66
Método 2 ( pip list) funciona muy bien hasta que pip se desinstale accidentalmente a sí mismo -_-
Justin
20
Lo logré haciendo lo siguiente:
Cree el archivo de requisitos llamado reqs.txt con la lista de paquetes actualmente instalados
pip freeze > reqs.txt
luego desinstale todos los paquetes de reqs.txt
pip uninstall \
-y # remove the package with prompting for confirmation-r reqs.txt
Me gusta este método, ya que siempre tiene un archivo de requisitos de pip en el que recurrir si comete un error. También es repetible.
¿Esto incluso maneja el caso donde hubo una instalación editable (básicamente una instalación en modo de desarrollo de herramientas de configuración) que creó un archivo .egg-info local que luego interfirió con el resto del proceso de instalación / desinstalación? Como se trata de un conjunto de archivos, no parece saber cómo manejar su presencia, y en lugar de desinstalar nada, completa una estructura de directorio local en MYENV con: `> Nuevos ejecutables de Python en MYENV / bin / python3.4> También crear ejecutable en MYENV / bin / python> Instalar setuptools, pip, wheel ... hecho. ¡Pero MYENV no ha restablecido el entorno!
mpacer
16
En Windows, si pathestá configurado correctamente, puede usar:
Solo una advertencia de que esto no es completamente sólido, ya que puede encontrarse con problemas como 'Archivo no encontrado', pero puede funcionar en algunos casos
EDITAR: Para mayor claridad: uninses un archivo arbitrario que tiene datos escritos cuando se ejecuta este comando:pip freeze > unins
Ese archivo que escribió a su vez se usa para desinstalar los paquetes antes mencionados con consentimiento implícito / aprobación previa a través de pip uninstall -y -r unins
(agregando esto como respuesta, porque no tengo suficiente reputación para comentar sobre la respuesta de @blueberryfields)
La respuesta de @blueberryfields funciona bien, pero falla si no hay un paquete para desinstalar (lo que puede ser un problema si este "desinstalar todo" es parte de un script o archivo MAKE). Esto se puede resolver con xargs -rla versión de GNU de xargs:
Si la entrada estándar no contiene espacios en blanco, no ejecute el comando. Normalmente, el comando se ejecuta una vez, incluso si no hay entrada. Esta opción es una extensión GNU.
Esta fue la forma más fácil para mí de desinstalar 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))
#!/usr/bin/env pythonfrom sys import stderr
from pip.commands.uninstall importUninstallCommandfrom pip import get_installed_distributions
pip_uninstall =UninstallCommand()
options, args = pip_uninstall.parse_args([
package.project_name
for package in
get_installed_distributions()ifnot package.location.endswith('dist-packages')])
options.yes =True# Don't confirm before uninstall# set `options.require_venv` to True for virtualenv restrictiontry:print pip_uninstall.run(options, args)exceptOSErroras 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.
En mi caso, accidentalmente instalé varios paquetes a nivel mundial utilizando un Homebrew instalado pipen macOS. La forma más fácil de volver a los paquetes predeterminados fue simple:
Esta respuesta supone demasiado sobre el entorno y no resuelve directamente el problema si está utilizando pyenv, por ejemplo.
Mark
@ Mark Bueno, seguro que si estás usando pyenv, entonces deberías hacer algo diferente. En el caso común de que no lo sea, creo que esta es la solución más simple y menos hacky. Tenga en cuenta que esta condición se establece explícitamente al comienzo de la respuesta.
Radon Rosborough
El OP preguntó sobre virtualenvs. No mencionó específicamente el uso de una Mac o una cerveza para instalar Python. Por lo tanto, no puede asumir que se utilizó el sistema operativo o la preparación, y esta respuesta no resolverá TODAS las condiciones. Si se enfoca en resolver el medio ambiente utilizando una herramienta como pip, abordará el contexto del entorno en el que se encuentra. Espero que tenga sentido.
Mark
1
@ Mark, entiendo tu posición. Podemos estar de acuerdo en no estar de acuerdo. Solo quiero ayudar a las personas de Google que hacen clic en un enlace llamado "¿Cuál es la forma más fácil de eliminar todos los paquetes instalados por pip?" cuando realmente quieren eliminar todos los paquetes instalados globalmente por pip.
Radon Rosborough
De acuerdo con @RadonRosborough, el título del enlace es representativo de por qué llegué aquí, incluso si el OP no hace la misma pregunta.
Kenn Sebesta
1
En Command Shell de Windows, el comando pip freeze | xargs pip uninstall -yno funcionará. Entonces, para aquellos de ustedes que usan Windows, he descubierto una forma alternativa de hacerlo.
Copie todos los nombres de los paquetes de pip instalados desde el pip freezecomando a un archivo .txt .
Luego, vaya a la ubicación de su archivo .txt y ejecute el comandopip uninstall -r *textfile.txt*
Creo que esta respuesta no agrega mucha información nueva, preferiría haber sugerido una mejora a otra respuesta similar ya existente como esta: stackoverflow.com/a/45475070/11138259
sinoroc
-1
Pip no tiene forma de saber qué paquetes fueron instalados por él y qué paquetes fueron instalados por el administrador de paquetes de su sistema. Para esto necesitarías hacer algo como esto
para 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;doif! 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;doif! dpkg-query -S "$f"&>/dev/null; then
echo "$f"
fi
done |xargs rm -fr
luego para limpiar los directorios vacíos sobrantes:
find /usr/lib/python2.7-type d -empty |xargs rm -fr
La respuesta principal me pareció muy engañosa, ya que eliminará todos (¿la mayoría?) Los paquetes de Python de su distribución y probablemente lo dejará con un sistema roto.
Con el debido respeto, esto parece comparable. ¿Por qué no dpkg-query -S '/usr/lib/python2.7/*', extraer los nombres y dpkg-query -Lcada nombre para volcar los archivos asociados? Ya tiene los manifiestos preparados. Mi principal objeción es que, en lugar de apuntar a paquetes instalados en cualquier lugar que no sea pip, ha apuntado paquetes instalados por cualquier otra cosa que no sea el administrador que espera, y en una ubicación que pip generalmente no debería tocar. pip list -lenumera los paquetes que instaló localmente, y algunos lo harán incluso pip install --target=.... ¡Eliminar todos los directorios actualmente vacíos también te morderá!
Respuestas:
He encontrado este fragmento como una solución alternativa. Es una eliminación más elegante de bibliotecas que rehacer virtualenv:
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):
fuente
postactivate
que permanecerán.setuptools
paquete. Resolví el problema siguiendo las instrucciones aquí: stackoverflow.com/questions/7446187/…pip freeze --exclude-editable | xargs pip uninstall -y
para ignorar los paquetes de VCS sin usar un patrón grepEsto funcionará para todos los sistemas Mac, Windows y Linux. Para obtener la lista de todos los paquetes de pip en el archivo require.txt (Nota: esto sobrescribirá a require.txt si existe, creará uno nuevo, también si no desea reemplazar los viejos requisitos.txt, entonces asigne un nombre de archivo diferente en todos los siguientes comandos en el lugar requisitos.txt).
Ahora para eliminar uno por uno
Si queremos eliminar todo de una vez, entonces
Si está trabajando en un proyecto existente que tiene un
requirements.txt
archivo y su entorno ha divergido, simplemente reemplacerequirements.txt
de los ejemplos anteriores contoberemoved.txt
. Luego, una vez que haya seguido los pasos anteriores, puede usarrequirements.txt
para actualizar su entorno ahora limpio.Y para un solo comando sin crear ningún archivo (como sugirió @joeb).
fuente
pip uninstall -r requirements.txt -y
pip uninstall -y -r <(pip freeze)
para hacer todo de una vez.Esto funciona con lo último. Creo que es la forma más corta y declarativa de hacerlo.
¡Pero generalmente solo borro y recreo el virtualenv ya que las reglas de inmutabilidad!
fuente
wipeenv
? virtualenvwrapper.readthedocs.org/en/latest/…wipeenv
que dentro del entorno arroja un error y no elimina nada si se usa en el contexto de unapip install -e
compilación de desarrollo, intentar usarvirtualenv --clear MYENV
no arroja un error y no elimina ninguno de los paquetes que puede haber instalado previamente en el entorno. Al menos este es el caso en OSX. Ver bitbucket.org/dhellmann/virtualenvwrapper/issues/211/… para más información.wipeenv
es un alias proporcionado por virtualenvwrapper, por lo que no todos lo tienen.Quería elevar esta respuesta de una sección de comentarios porque es una de las soluciones más elegantes del hilo. El crédito completo por esta respuesta va a @joeb .
Esto funcionó muy bien para mí para el caso de uso de borrar mi carpeta de paquetes de usuario fuera del contexto de un virtualenv que muchas de las respuestas anteriores no manejan.
Editar: ¿Alguien sabe cómo hacer que este comando funcione en un Makefile?
Bonus: un alias bash
Agrego esto a mi perfil de bash por conveniencia:
Entonces corre:
Alternativa para pipenv
Si está utilizando pipenv , puede ejecutar:
fuente
pip freeze
genera ningún resultado si no hay paquetes instalados ypip uninstall
, lamentablemente, se queja).<(...)
es un bashism. Entonces puede usar bash -c "...", o trabajar haciendo unpip freeze | pip uninstall -r /dev/stdin
ERROR: Cannot uninstall 'bitarray'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
Otras respuestas que usan
pip list
opip freeze
deben incluir--local
más también desinstalarán los paquetes que se encuentran en los espacios de nombres comunes.Así que aquí están los fragmentos que uso regularmente
Árbitro:
pip freeze --help
fuente
ERROR: Cannot uninstall 'bitarray'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
. Entonces no pude desinstalar más módulos.Método 1 (con
pip freeze
)Método 2 (con
pip list
)Método 3 (con
virtualenv
)fuente
pip list
) funciona muy bien hasta que pip se desinstale accidentalmente a sí mismo -_-Lo logré haciendo lo siguiente:
Cree el archivo de requisitos llamado reqs.txt con la lista de paquetes actualmente instalados
luego desinstale todos los paquetes de reqs.txt
Me gusta este método, ya que siempre tiene un archivo de requisitos de pip en el que recurrir si comete un error. También es repetible.
fuente
La forma más rápida es rehacer el virtualenv por completo. Supongo que tiene un archivo require.txt que coincide con la producción, si no:
fuente
En Windows, si
path
está configurado correctamente, puede usar:Debería ser un caso similar para sistemas tipo Unix:
Solo una advertencia de que esto no es completamente sólido, ya que puede encontrarse con problemas como 'Archivo no encontrado', pero puede funcionar en algunos casos
EDITAR: Para mayor claridad:
unins
es un archivo arbitrario que tiene datos escritos cuando se ejecuta este comando:pip freeze > unins
Ese archivo que escribió a su vez se usa para desinstalar los paquetes antes mencionados con consentimiento implícito / aprobación previa a través de
pip uninstall -y -r unins
El archivo finalmente se elimina al finalizar.
fuente
Usando la función virtualenvwrapper :
Ver documentación de wipeenv
fuente
wipeenv
Primero, agregue todo el paquete a
requirements.txt
Luego elimine todo
fuente
Es una vieja pregunta que conozco, pero me topé con ella, así que para futuras referencias, ahora puede hacer esto:
de la documentación de pip versión 8.1
fuente
Para los usuarios de Windows, esto es lo que uso en Windows PowerShell
fuente
(agregando esto como respuesta, porque no tengo suficiente reputación para comentar sobre la respuesta de @blueberryfields)
La respuesta de @blueberryfields funciona bien, pero falla si no hay un paquete para desinstalar (lo que puede ser un problema si este "desinstalar todo" es parte de un script o archivo MAKE). Esto se puede resolver con
xargs -r
la versión de GNU dexargs
:de
man xargs
:fuente
El caso podría ser que uno tiene que ejecutar este comando varias veces para obtener un vacío
pip3 freeze --local
.fuente
Esta fue la forma más fácil para mí de desinstalar todos los paquetes de Python.
fuente
Soporte multiplataforma utilizando solo
pip
:fuente
Este es el comando que funciona para mí:
fuente
La manera fácil y robusta multiplataforma y trabajo en pipenv también es:
por pipenv:
pero no actualizará piplock o pipfile, así que ten en cuenta
fuente
Si estás corriendo
virtualenv
:por ejemplo, si tu virtualenv es
/Users/you/.virtualenvs/projectx
, entonces ejecutarías:si no sabe dónde se encuentra su entorno virtual, puede ejecutarlo
which python
desde un entorno virtual activado para obtener la rutafuente
En mi caso, accidentalmente instalé varios paquetes a nivel mundial utilizando un Homebrew instalado
pip
en macOS. La forma más fácil de volver a los paquetes predeterminados fue simple:O, si estuvieras usando
pip3
:fuente
pip freeze
comando a un archivo .txt .pip uninstall -r *textfile.txt*
fuente
Si está usando
pew
, puede usar el comando wipeenv :pew wipeenv [env]
fuente
Uso la opción --user para desinstalar todos los paquetes instalados en el sitio del usuario.
fuente
Pip no tiene forma de saber qué paquetes fueron instalados por él y qué paquetes fueron instalados por el administrador de paquetes de su sistema. Para esto necesitarías hacer algo como esto
para distribuciones basadas en rpm (reemplace python2.7 con su versión de python con la que instaló pip):
para una distribución basada en deb:
luego para limpiar los directorios vacíos sobrantes:
La respuesta principal me pareció muy engañosa, ya que eliminará todos (¿la mayoría?) Los paquetes de Python de su distribución y probablemente lo dejará con un sistema roto.
fuente
dpkg-query -S '/usr/lib/python2.7/*'
, extraer los nombres ydpkg-query -L
cada nombre para volcar los archivos asociados? Ya tiene los manifiestos preparados. Mi principal objeción es que, en lugar de apuntar a paquetes instalados en cualquier lugar que no sea pip, ha apuntado paquetes instalados por cualquier otra cosa que no sea el administrador que espera, y en una ubicación que pip generalmente no debería tocar.pip list -l
enumera los paquetes que instaló localmente, y algunos lo harán inclusopip install --target=...
. ¡Eliminar todos los directorios actualmente vacíos también te morderá!