disinstallare Python installato compilando l'origine?


18

Ho installato Python 2.7.9 su Ubuntu 14.04 compilando il suo sorgente , da .configre, makee make altinstall. make altinstallè perché non voglio sovrascrivere Python 2.7.6 predefinito. Il mio 2.7.9 auto installato è in /usr/local/bin/python2.7e molti altri file in altre directory sotto /usr/local. Da README nel pacchetto di installazione di origine:

Sui sistemi Unix e Mac se si intende installare più versioni di Python utilizzando lo stesso prefisso di installazione (argomento --prefix per lo script di configurazione), è necessario assicurarsi che il file eseguibile python primario non venga sovrascritto dall'installazione di una versione diversa.

Tutti i file e le directory installati utilizzando "make altinstall" contengono la versione principale e secondaria e possono quindi vivere fianco a fianco. "make install" crea anche $ {prefix} / bin / python che si riferisce a $ {prefix} /bin/pythonX.Y.

Se si intende installare più versioni utilizzando lo stesso prefisso, è necessario decidere quale versione (se presente) è la versione "primaria". Installa quella versione usando "make install". Installa tutte le altre versioni usando "make altinstall".

Ad esempio, se si desidera installare Python 2.5, 2.6 e 3.0 con 2.6 come versione primaria, eseguire "make install" nella directory di build 2.6 e "make altinstall" negli altri.

Ora voglio disinstallare il mio 2.7.9 autoinstallato.

  1. Fortunatamente ho ancora il codice sorgente, ma sfortunatamente il Makefile non ha la sezione di disinstallazione

    $ sudo make uninstall
    make: *** No rule to make target `uninstall'.  Stop.
  2. Quindi ho provato in un altro modo: prima creare un deb dal sorgente e dalla compilation, installare il deb (si spera sovrascrivendo i file installati make altinstall), quindi disinstallare il deb.

    Ma quando creo il file deb da checkinstall, non sono sicuro se e come dovrei fare diversamente per make altinstallda per make install. Quello che ho provato è:

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

    Mi chiedo come posso creare un deb in modo che l'installazione del deb duplicherà il processo di installazione di make altinstall?

  3. O qual è il tuo modo di disinstallare my python 2.7.9?

Nota: il pacchetto sorgente nel primo anello ha anche setup.py, install-sholtre README.


Python non si installa in così tanti posti. Vorrei solo rimuovere i file manualmente.
Faheem Mitha,

grazie. che cosa sono quei posti allora?
StackExchange per tutto il

Dai un'occhiata a uno dei pacchetti binari. Sono essenzialmente gli stessi posti, penso, tranne che /usr/localè usato al posto di /usr. dpkg -L python2.7e dpkg -L python2.7-minimal. E di cosa hai bisogno 2.7.9?
Faheem Mitha,

Ho sentito che ha pip di default. Ma dopo l'installazione, non trovo che abbia pip.
StackExchange per tutto il

Puoi installare pip apt-get install python-pip.
Faheem Mitha,

Risposte:


20

I seguenti comandi rimuoveranno il tuo make altinstallpitone -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

Potrebbe anche essere necessario

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

Sebbene make altinstall mi ha servito bene se il "sistema Python" ha un numero major.minor diverso da quello che installi, non funziona così bene se differisce solo il micro numero (la terza posizione). Quel numero è escluso dal binario installato e si finisce con due versioni pythonX.Y. Questo è sempre stato un problema, ma una volta che le distribuzioni hanno iniziato a essere distribuite con utility di sistema basate su 2.7.X, questo problema è stato più grave in quanto 2.7 dovrebbe essere l'ultimo della serie Python2.

IMO il miglior approccio per risolvere questo problema è quello di impedire che diventi uno: configura python per installarlo in una directory non utilizzata da nessun altro python. Sul mio sistema vanno sotto/opt/python/X.Y.Z .

Per usare uno dei Pythons installati lì, usi [virualenv][1]per creare un nuovo ambiente:

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

o usare [virtualenvwrapper][2]. Ho alcuni alias per le ultime versioni della serie con cui lavoro.

Se si utilizza toxper il test su più versioni (è necessario) il seguente alias lo aiuterà a trovare le varie versioni:

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'

(queste sono attualmente le ultime versioni, utilizzo un'impostazione leggermente diversa mantenendo i collegamenti /opt/python/2.7all'ultima /opt/python/2.7.9e anche per gli altri numeri minori, all'interno del processo di download, creazione e installazione di una nuova versione di Python)

Queste installazioni non vengono mai utilizzate direttamente. Sono sempre usati come base virtualenvsolo per ambienti, quindi non mi interessa che non siano nel mio normale PERCORSO.


2
Non eliminare /usr/local/lib/python2.7! Tutti i moduli python globali installati da pip vivono in /usr/local/lib/python2.7/dist-packages. Tutti quei moduli si romperanno!
Abhaga,

2
@abhaga Non dovresti installarlo pipal di fuori di a virtualenvsu nessuna installazione di Linux
Anthon,

Non dovremmo inoltre disinstallare i pacchetti rimuovendo manualmente file e directory. :) Queste sono buone pratiche e ci sono sempre occasioni in cui dobbiamo romperle. Ma è importante sapere che non è sicuro rimuovere quella directory.
Abhaga,

Nel mio CentOS7, ci sono alcuni differenti: 1. include dovrebbe essere: /usr/local/include/python2.7, senza bin; 2. il file man è /usr/local/share/man/man1/python2.7.1; 3. Un altro file: /usr/local/bin/python2.7-config
Bin S

7

Partendo dall'elenco di @ Anthon rme applicando i consigli di @ bin-s per cercare i file più recenti, ho trovato questo script bash per cancellare completamente il mio Python-3.6.6 (che era stato installato da fonti 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.

Usalo con cura (ad esempio aggiungi -Iun'opzione in rm cmd per verificare ogni uccisione).


molto bella. Ora python3.X non viene visualizzato quando digito python3 e premo la scheda
Prometeo

1

Di solito tutti i file vengono installati in quasi un minuto. È possibile utilizzare "trova" per controllare quasi tutti i file installati contemporaneamente, quindi "rm" manualmente. Lo auguro utile.

find /usr/local/ -type f -newer <some latest old file>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.