2010-10-23 12 views
6

He instalado una aplicación de pitón con este setup.py:¿Cómo eliminar un programa instalado con distutils?

#!/usr/bin/env python 

from distutils.core import setup 
from libyouandme import APP_NAME, APP_DESCRIPTION, APP_VERSION, APP_AUTHORS, APP_HOMEPAGE, APP_LICENSE 

setup(
    name=APP_NAME.replace(" ","-").lower(), 
    version=APP_VERSION, 
    description=APP_DESCRIPTION, 
    author="John G", 
    author_email="[email protected]", 
    url=APP_HOMEPAGE, 
    license=APP_LICENSE, 
    scripts=["youandme.py"], 
    packages=["libyouandme"], 
    data_files=[ 
     ('share/applications', ['youandme.desktop']), 
     ('usr/share/icons/hicolor/16x16/apps', ['icons/hicolor/16x16/apps/you.png']), 
     ('usr/share/icons/hicolor/22x22/apps', ['icons/hicolor/22x22/apps/you.png']), 
     ('usr/share/icons/hicolor/48x48/apps', ['icons/hicolor/48x48/apps/you.png'])], 
) 

¿Cómo puedo eliminar esta aplicación de mi máquina ubuntu?

¿Puedo hacer esto con distutils?

+0

posible duplicado: http://stackoverflow.com/questions/402359/how-do-you-uninstall-a-python-package-that-was-installed-using-distutils – mouad

Respuesta

6

Instalar el paquete checkinstall de Ubuntu. checkinstall supervisa el procedimiento de instalación y crea un paquete deb. Esto le permite usar comandos regulares de administración de paquetes para eliminar el software.

Primero, vuelva a instalar el módulo/paquete candidato python usando la instalación de verificación. Cambie el directorio al directorio que contiene el archivo setup.py del módulo Python candidato/paquete:

cd <PACKAGE_NAME> 

continuación:

sudo checkinstall -D --fstrans=no python setup.py install 

Esto crea un paquete .deb, y ensambla el módulo de Python. Se le harán algunas preguntas. Las respuestas predeterminadas deberían estar bien. (Pero es posible que cambie el "nombre" del paquete .deb, cuando el archivo setup.py está en un subdirectorio del módulo de Python, por ejemplo, la "fuente" subdirectorio.)

(El salvado paquete .deb ahora capta cómo el paquete python instalado en sí, y dpkg puede quitar el paquete python)

después se retira el módulo:.

sudo dpkg -r <PACKAGE_NAME> 

PS. He oído que algunos programas de instalación no son compatibles con checkinstall, aunque nunca me he encontrado con ningún problema.

5

yo sepa solamente PIP permite desinstalar módulos de Python, así que si no lo tiene instalado, puede instalarlo con

sudo easy_install pip 

y luego usar PIP para desinstalar el módulo de

sudo pip uninstall <module_name> 

donde module_name es el valor pasado en el argumento name de la función setup.

Editar: acabo de ver que has etiquetado a su pregunta con "python3.x", y no hay una versión 3.x para PIP, sin embargo, por lo que si necesita desinstalar un módulo python3.x, esta respuesta doesn no se ajusta

+0

Creo que pip no puede desinstalar el paquete que se instaló con setup.py install o develop see this: http://pip.openplans.org/ section uninstall – mouad

+0

@singularity: hmm, extraño, instalé muchas librerías caseras usando 'python setup.py install' y lo hice Siempre pude eliminarlos con pip, incluso si la documentación de pip parece indicar que no debería haber sido capaz de hacerlo. Podría haberme perdido algo ... – MatToufoutu

+0

sí, suena raro, porque para hacer que la desinstalación de pip funcione, pip crea un metadato para cada paquete instalado para que pueda rastrear todos los archivos que se han creado, para que así pueda eliminarse cuando puedes desinstalar pip, pero las distuciones no hacen esto, y sé como dije en mi respuesta, distutils2 puede hacer esto también, pero nunca programan agregar esta característica a distutils, puedes verla aquí: http://bugs.python.org/issue4673 – mouad

2

La versión 1 de disutils no admite el comando de desinstalación y también he incluido un enlace en el comentario para verlo, pero solo para información disutils2 ahora admite el comando de desinstalación, han estado trabajando en ello en el pasado GSoC , puede verificar esto link

La única manera de "desinstalar" su paquete es mediante la eliminación de todos sus archivos a mano, puedo ver que tiene algunos archivos en/usr/share .., no lo hago saber si ya lo sabes pero puedes usar python install.py desarrollar al desarrollar tu módulo, hará cambios y eliminarlos fácilmente.

0

Desde pip 8.0.0 ejecutando pip uninstall <package> no funciona cuando <package> es algo que el sistema operativo preinstaló (probablemente con la instalación de python setup.py).

El mensaje de error es:

detecta un proyecto instalado distutils ('<package>') que no podemos desinstalar. Los metadatos proporcionados por distutils no contienen una lista de archivos que se han instalado, por lo que pip no sabe qué archivos desinstalar.

En lugar de utilizar pip para desinstalar estos paquetes, debe usar el administrador de paquetes del sistema operativo.

Así que en Ubuntu: sudo apt-get remove python-<package> lo eliminaría.

he encontrado dos paquetes que tienen este problema: httplib2 y seis, y el truco de arriba me ayudó a conseguir por ese error. Espero que otros lo encuentren útil.

Cuestiones relacionadas