¿Cómo se desinstala un paquete de Python que se instaló usando distutils?

92

¿Puede simplemente eliminar el directorio de su instalación de Python, o hay algún archivo persistente que deba eliminar?

Hortitud
fuente

Respuestas:

45

Varía según las opciones a las que pasa instally el contenido de los archivos de configuración de distutils en el sistema / en el paquete. No creo que ningún archivo se modifique fuera de los directorios especificados de esta manera.

En particular, distutils no tiene un comando de desinstalación en este momento.

También es digno de mención que eliminar un paquete / huevo puede causar problemas de dependencia; las utilidades como easy_installintentan aliviar dichos problemas.

cdleary
fuente
4
¿Puede actualizar esto para abordar directamente la parte de los archivos persistentes de la pregunta?
S.Lott
Pensé que sí, no se crean archivos fuera de los directorios especificados por la configuración de distutils y los indicadores de instalación, por lo que cualquier archivo "persistente" existirá en estos directorios. Varía de un paquete a otro.
Cdleary
2
@cdleary: gracias, pero esperaba que simplemente aclarara y fortaleciera su respuesta, no agregara un hilo de comentarios largo.
S.Lott
2
@ S.Lott: Lo siento, pero no sé qué parte de la respuesta desea aclarar, ¿puede ser más específico?
cdleary
1
msg139773 Fecha: 2011-07-04 14:35 distutils2 / packaging ahora proporciona una función de eliminación y un comando de eliminación de pysetup.
Edward
19

Las tres cosas que se instalan y que deberá eliminar son:

  1. Paquetes / módulos
  2. Guiones
  3. Archivos de información

Ahora en mi sistema Linux estos viven en:

  1. /usr/lib/python2.5/site-packages
  2. / usr / bin
  3. / usr / compartir

Pero en un sistema Windows es más probable que estén completamente dentro del directorio de distribución de Python. No tengo ni idea de OSX, excepto que es más probable que siga el patrón de Linux.

Ali Afshar
fuente
14

Otro truco basado en sellos de tiempo:

  1. Crea un ancla: touch /tmp/ts
  2. Reinstale el paquete que se eliminará: python setup.py install --prefix=<PREFIX>
  3. Elimine archivos que sean más recientes que el archivo de anclaje: find <PREFIX> -cnewer /tmp/ts | xargs rm -r
maximk
fuente
1
-1. No me gusta el | xargs rm -r. Recomiendo revisar cada archivo manualmente . En ext4 (y otros sistemas de archivos), esto también findenumerará todas las carpetas . Si su prefijo era /usr, lo eliminará/usr/* .
Mateen Ulhaq
8

Sí, es seguro simplemente eliminar todo lo que distutils instalado. Eso se aplica a las carpetas instaladas o archivos .egg. Naturalmente, cualquier cosa que dependa de ese código ya no funcionará.

Si desea que vuelva a funcionar, simplemente vuelva a instalarlo.

Por cierto, si está usando distutils, también considere usar la función de múltiples versiones. Le permite tener varias versiones de un solo paquete instalado. Eso significa que no necesita eliminar una versión anterior de un paquete si simplemente desea instalar una versión más nueva.

Salim Fadhley
fuente
5

En ubuntu 12.04, descubrí que el único lugar donde debe buscar de forma predeterminada es debajo

/usr/local/lib/python2.7/

¡Y simplemente elimine la carpeta y el archivo asociados, si los hay!

Hydrox24
fuente
A veces en / usr / lib / python <2.7 / 3.6>
Vineet
4

Si esto es para propósitos de prueba y / o desarrollo, setuptools tiene un comando de desarrollo que se actualiza cada vez que realiza un cambio (por lo que no tiene que desinstalar y reinstalar cada vez que realiza un cambio). Y también puede desinstalar el paquete usando este comando.

Si usa esto, todo lo que declare como un script se dejará como un archivo persistente.

Jason Baker
fuente
4

install --record + xargs rm

sudo python setup.py install --record files.txt
xargs sudo rm -rf < files.txt

elimina todos los archivos y deja directorios vacíos.

Eso no es ideal, debería ser suficiente para evitar conflictos de paquetes.

Y luego puede terminar el trabajo manualmente si lo desea leyendo files.txt, o ser más valiente y automatizar la eliminación de directorios vacíos también.

Un ayudante seguro sería:

python-setup-uninstall() (
  sudo rm -f files.txt
  sudo python setup.py install --record files.txt && \
  xargs rm -rf < files.txt
  sudo rm -f files.txt
)

Probado en Python 2.7.6, Ubuntu 14.04.

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
fuente
3

para Python en Windows:

python -m pip uninstall "package_keyword"
uninstall **** (y/n)?
user8074545
fuente
2

Acabo de desinstalar un paquete de Python y, aunque no estoy seguro de haberlo hecho a la perfección, tengo una confianza razonable.

Comencé obteniendo una lista de todos los archivos relacionados con Python, ordenados por fecha, asumiendo que todos los archivos de mi paquete tendrán más o menos la misma marca de tiempo, y ningún otro archivo la tendrá.

Afortunadamente, tengo Python instalado debajo /opt/Python-2.6.1; si hubiera estado usando Python que viene con mi distribución de Linux, habría tenido que rastrearlo todo /usr, lo que habría llevado mucho tiempo.

Luego examiné esa lista y noté con alivio que todo lo que quería destruir consistía en un directorio /opt/Python-2.6.1/lib/python2.6/site-packages/module-name/y un archivo /opt/Python-2.6.1/lib/python2.6/site-packages/module-x.x.x_blah-py2.6.egg-info.

Así que los borré.

Así es como obtuve la lista de archivos ordenados por fecha:

find "$@" -printf '%T@ ' -ls | sort -n | cut -d\ -f 2-

(Por cierto, creo que tiene que ser GNU "find"; el sabor que obtienes en OS X no conoce "-printf '% T @'")

Lo uso todo el tiempo.

offby1
fuente
2

Para Windows 7,

Panel de control -> Programas -> Desinstalar

, luego

elija el paquete de python para eliminar.

b_dev
fuente
@Mauricio No veo versiones antiguas en la lista pero puedo ver los archivos egg en los paquetes del sitio. ¿Es esto un problema?
1

En Mac OSX, elimine manualmente estos 2 directorios en su ruta .ToPython / site-packages / funcionará:

  • {Nombre del paquete}
  • {packageName} - {version} -info

por ejemplo, para eliminar pyasn1 , que es un proyecto instalado de distutils:

  • rm -rf lib / python2.7 / site-packages / pyasn1
  • rm -rf lib / python2.7 / site-packages / pyasn1-0.1.9-py2.7.egg-info

Para saber dónde están los paquetes de su sitio:

python -m site
Lynne
fuente
1
Funciona como se esperaba.
c1377554
-1

ERROR: flake8 3.7.9 has requirement pycodestyle<2.6.0,>=2.5.0, but you'll have pycodestyle 2.3.1 which is incompatible. ERROR: nuscenes-devkit 1.0.8 has requirement motmetrics<=1.1.3, but you'll have motmetrics 1.2.0 which is incompatible. Installing collected packages: descartes, future, torch, cachetools, torchvision, flake8-import-order, xmltodict, entrypoints, flake8, motmetrics, nuscenes-devkit Attempting uninstall: torch Found existing installation: torch 1.0.0 Uninstalling torch-1.0.0: Successfully uninstalled torch-1.0.0 Attempting uninstall: torchvision Found existing installation: torchvision 0.2.1 Uninstalling torchvision-0.2.1: Successfully uninstalled torchvision-0.2.1 Attempting uninstall: entrypoints Found existing installation: entrypoints 0.2.3 ERROR: Cannot uninstall 'entrypoints'. 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.

Luego escribo:

conda uninstall entrypoints pip install --upgrade pycodestyle pip install nuscenes-devkit

¡Hecho!

buena pluma
fuente
1
Intente explicar lo que está haciendo y por qué en lugar de mostrar la salida de la consola.
Headhunter Xamd