desinstalar Python instalado compilando fuente?

18

He instalado Python 2.7.9 en Ubuntu 14.04 mediante la compilación de su fuente , por .configre, makey make altinstall. make altinstalles porque no quiero sobrescribir el Python 2.7.6 predeterminado. Mi ser instalado en 2.7.9 es /usr/local/bin/python2.7y muchos otros archivos en otros directorios bajo /usr/local. Desde README en el paquete de instalación de origen:

En los sistemas Unix y Mac, si tiene la intención de instalar varias versiones de Python utilizando el mismo prefijo de instalación (argumento de prefijo para el script de configuración), debe tener cuidado de que su ejecutable principal de Python no se sobrescriba con la instalación de una versión diferente.

Todos los archivos y directorios instalados usando "make altinstall" contienen la versión mayor y menor y, por lo tanto, pueden vivir lado a lado. "make install" también crea $ {prefix} / bin / python que se refiere a $ {prefix} /bin/pythonX.Y.

Si tiene intención de instalar varias versiones con el mismo prefijo que debe decidir qué versión (si lo hay) es su versión de "primaria". Instale esa versión usando "make install". Instale todas las demás versiones utilizando "make altinstall".

Por ejemplo, si desea instalar Python 2.5, 2.6 y 3.0 siendo 2.6 la versión principal, debe ejecutar "make install" en su directorio de compilación 2.6 y "make altinstall" en los demás.

Ahora quiero desinstalar mi 2.7.9 autoinstalado.

  1. Afortunadamente todavía tengo el código fuente, pero desafortunadamente, el Makefile no tiene la sección de desinstalación

    $ sudo make uninstall
    make: *** No rule to make target `uninstall'.  Stop.
  2. Luego intenté de otra manera: primero creé un deb desde la fuente y la compilación, instalé el deb (con suerte sobrescribiendo los archivos instalados make altinstall) y luego desinstalé el deb.

    Sin embargo, cuando se crea el archivo deb checkinstall, no estoy seguro de si y cómo debe hacer de manera diferente para make altinstalla partir de make install. Lo que probé es:

    $ checkinstall altinstall
    
    ...
    
    Installing with altinstall...
    
    ========================= Installation results ===========================
    /var/tmp/tmp.4ZzIiwqBNL/installscript.sh: 4: /var/tmp/tmp.4ZzIiwqBNL/installscript.sh: altinstall: not found
    
    ...

    Me pregunto cómo puedo crear un deb para que la instalación del deb duplique el proceso de instalación make altinstall.

  3. ¿O cuál es su forma de desinstalar mi python 2.7.9?

Nota: el paquete fuente en el primer enlace también tiene setup.py, install-shademás README.

StackExchange para todos
fuente
Python no se instala en tantos lugares. Simplemente eliminaría los archivos manualmente.
Faheem Mitha
gracias, ¿cuáles son esos no muchos lugares entonces?
StackExchange para Todos
Echa un vistazo a uno de los paquetes binarios. Es esencialmente los mismos lugares, creo, excepto que /usr/localse usa en lugar de /usr. dpkg -L python2.7y dpkg -L python2.7-minimal. ¿Y para qué necesitas 2.7.9?
Faheem Mitha
Escuché que tiene pip por defecto. Pero después de instalar, no encuentro que tenga pip.
StackExchange for All
Puedes instalar pip apt-get install python-pip.
Faheem Mitha

Respuestas:

20

Los siguientes comandos eliminarán tu make altinstallpython ed:

rm -f /usr/local/bin/python2.7
rm -f /usr/local/bin/pip2.7
rm -f /usr/local/bin/pydoc
rm -rf /usr/local/bin/include/python2.7
rm -f /usr/local/lib/libpython2.7.a
rm -rf /usr/local/lib/python2.7

Puede que también tengas que hacer

rm -f /usr/local/share/man/python2.7.1
rm -rf /usr/local/lib/pkgconfig
rm -f /usr/local/bin/idle
rm -f /usr/local/bin/easy_install-2.7

A pesar de que make altinstall me ha servido bien si el "sistema python" tiene un número mayor.minor diferente del que instala, no funciona tan bien si solo el número micro (la tercera posición) difiere. Ese número se excluye del binario instalado, y se acaba con dos versiones pythonX.Y. Esto siempre fue un problema, pero una vez que las distribuciones comenzaron a distribuirse con las utilidades del sistema basadas en 2.7.X, este problema ha sido más grave, ya que se supone que 2.7 es la última de la serie Python2.

En mi opinión, el mejor enfoque para resolver este problema es evitar que se convierta en uno: configure Python para que se instale en un directorio no utilizado por ningún otro Python. En mi sistema se hunden/opt/python/X.Y.Z .

Para usar cualquiera de las pitones instaladas allí, se usa [virualenv][1]para crear un nuevo entorno:

virtualenv --python=/opt/python/2.7.9/bin/python2.7 venv
source venv/bin/activate

o uso [virtualenvwrapper][2]. Tengo algunos alias para las últimas versiones de la serie con la que trabajo.

Si está utilizando toxpara probar contra múltiples versiones (debería) la siguiente alias le ayudará a encontrar los distintos versión:

alias tox='PATH=/opt/python/2.7.9/bin:/opt/python/2.6.9/bin:/opt/python/3.4.3/bin:/opt/python/3.3.6/bin:/opt/python/3.5-dev/bin:$PATH tox'

(estas son actualmente las últimas versiones, utilizo una configuración ligeramente diferente al mantener los enlaces desde /opt/python/2.7la última /opt/python/2.7.9, y también para los otros números menores, dentro del proceso de descarga, construcción e instalación de una nueva versión de Python)

Estas instalaciones nunca se usan directamente. Siempre se usan como base para virtualenventornos solamente, por lo tanto, no me importa que no estén en mi RUTA normal.

Anthon
fuente
2
¡No elimine /usr/local/lib/python2.7! Todos los módulos globales de Python instalados por pip live en /usr/local/lib/python2.7/dist-packages. ¡Todos esos módulos se romperán!
abhaga
2
@abhaga No debe instalar con el pipexterior de un virtualenvsobre cualquier instalación de Linux
Anthon
Tampoco debemos desinstalar paquetes eliminando manualmente archivos y directorios. :) Estas son buenas prácticas y siempre hay ocasiones en que necesitamos romperlas. Pero es importante saber que no es seguro eliminar ese directorio.
abhaga
En mi CentOS7, hay algunos diferentes: 1. include debe ser: /usr/local/include/python2.7, sin bin; 2. el archivo man es /usr/local/share/man/man1/python2.7.1; 3. Otro archivo: /usr/local/bin/python2.7-config
Bin S
7

Comenzando por la rmlista de @ Anthon y aplicando los consejos de @ bin-s para buscar archivos más nuevos, se me ocurrió este script bash para borrar completamente mi Python-3.6.6 (que se había instalado desde las fuentes con make altinstall):

prefix='/usr/local/'
pyver='3.6'

rm -rf \
    ${prefix}bin/python${pyver} \
    ${prefix}bin/pip${pyver} \
    ${prefix}bin/pydoc \
    ${prefix}bin/include/python${pyver} \
    ${prefix}lib/libpython${pyver}.a \
    ${prefix}lib/python${pyver} \
    ${prefix}bin/python${pyver} \
    ${prefix}bin/pip${pyver} \
    ${prefix}bin/include/python${pyver} \
    ${prefix}lib/libpython${pyver}.a \
    ${prefix}lib/python${pyver} \
    ${prefix}lib/pkgconfig/python-${pyver}.pc \
    ${prefix}lib/libpython${pyver}m.a \
    ${prefix}bin/python${pyver}m \
    ${prefix}bin/2to3-${pyver} \
    ${prefix}bin/python${pyver}m-config \
    ${prefix}bin/idle${pyver} \
    ${prefix}bin/pydoc${pyver} \
    ${prefix}bin/pyvenv-${pyver} \
    ${prefix}share/man/man1/python${pyver}.1 \
    ${prefix}include/python${pyver}m
    ${prefix}bin/pydoc ## WARN: skip if other pythons in local exist.

Úselo con cuidado (por ejemplo, agregue la -Iopción en cm rm para verificar cada muerte).

ankostis
fuente
muy agradable. Ahora python3.X no aparece cuando escribo python3 y presiono la pestaña
Prometheus
1

Por lo general, todos los archivos se instalan en casi un minuto. Puede usar "buscar" para verificar todos los archivos instalados casi al mismo tiempo, luego "rm" manualmente. Lo deseo útil.

find /usr/local/ -type f -newer <some latest old file>
bin S
fuente