Restaurar la instalación de Python a las dependencias predeterminadas más del paquete apt

14

He jugado mucho con mis instalaciones de Python (2 y 3) e instalé un montón de paquetes, algunos usando apt-get, pero la mayoría usando pip. También he actualizado muchos aptpaquetes instalados con pipuna versión más nueva.

Mi pregunta es:
¿cómo puedo revertir todos esos cambios, eliminar todos los pippaquetes de Python instalados y simplemente mantener el conjunto predeterminado de paquetes preinstalados en su versión de repositorio predeterminada, además de los instalados por apt-getpero solo como dependencia de otro software, siempre bajando al repositorio versión si es necesario.

Quiero hacer esto para tener un entorno Python ordenado para el sistema y tener mis modificaciones solo en virtualenvs.

¿Es eso posible sin una reinstalación del sistema? ¿Cómo lo abordaría?

Byte Commander
fuente

Respuestas:

5

Comenzaría enumerando los paquetes de Python administrados por apt-get(el siguiente one-liner tarda unos segundos en ejecutarse, sea paciente):

$ for pyfile in `ls /usr/lib/python2.7/dist-packages`; do dpkg -S "/usr/lib/python2.7/dist-packages/${pyfile}" | sed 's/:.*//g'; done | sort -u

Nota: si es necesario, reemplace 2.7 con cualquier versión de Python que le interese.

A continuación, desinstale los paquetes que instaló manualmente. Si no está seguro de cuáles instaló, puede obtener la lista de todos los paquetes instalados manualmente con el siguiente comando (consulte esta pregunta ):

$ comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

Luego desinstale los paquetes de Python que instaló manualmente, por ejemplo:

$ sudo apt-get remove python-tk python-scipy

A continuación, desea saber qué paquetes instaló usando pip:

$ ls -ltd /usr/local/lib/python2.7/dist-packages/*

Este comando enumera los contenidos del directorio de instalación de pip ordenados por fecha de última modificación, lo que facilita encontrar los paquetes que instaló usted mismo. Por ejemplo, instalé la gcloudherramienta de Google que instala un montón de paquetes pip que no quiero desinstalar, pero mirando a través de la lista es fácil ver que todos se instalaron al mismo tiempo, así que sé cuáles debo dejar y cuáles puedo desinstalar. Antes de desinstalar cualquier paquete pip, debe tomar una instantánea de la lista de paquetes instalados:

$ sudo pip freeze > $HOME/pip_freeze_snapshot.txt

Luego, simplemente desinstale los paquetes que desee, por ejemplo:

$ sudo pip uninstall py pytest

Finalmente, no olvide que algunos paquetes pip pueden haber sido instalados en su directorio de usuario. Quizás estés de acuerdo con eso, pero si no, puedes enumerarlos:

$ ls -ltd $HOME/.local/lib/python2.7/site-packages/*

Si desea deshacerse de todos estos paquetes, simplemente puede eliminar este directorio. De lo contrario, simplemente desinstale los paquetes individuales, por ejemplo:

$ pip uninstall tensorflow

No olvides buscar otras versiones de Python (por ejemplo, 3.5).

MiniQuark
fuente
Recomendaría un anuncio de seguridad pública de que eliminar demasiados paquetes puede dañar su sistema, pero de lo contrario, esta es una guía excelente. (Por ejemplo, yo estaba contento de que hice mven vez de rmen mi /usr/local/lib/python3.6porque he descubierto unos minutos después de que necesitaba algunas cosas allí para las funciones básicas del sistema bastante.
CRAQ