Python deinstallieren, das durch Kompilieren des Quellcodes installiert wurde?

18

Ich installierte Python 2.7.9 auf Ubuntu 14.04 durch Kompilieren der Quelle , durch .configre, makeund make altinstall. make altinstallDas liegt daran, dass ich das Standard-Python 2.7.6 nicht überschreiben möchte. Meine selbst installierte 2.7.9 befindet sich in /usr/local/bin/python2.7und viele andere Dateien in anderen Verzeichnissen unter /usr/local. In README im Quellinstallationspaket :

Wenn Sie auf Unix- und Mac-Systemen mehrere Versionen von Python mit demselben Installationspräfix (--prefix-Argument für das Konfigurationsskript) installieren möchten, müssen Sie darauf achten, dass Ihre primäre ausführbare Python-Datei nicht durch die Installation einer anderen Version überschrieben wird.

Alle Dateien und Verzeichnisse, die mit "make altinstall" installiert wurden, enthalten die Haupt- und Nebenversion und können somit nebeneinander laufen. "make install" erstellt auch $ {prefix} / bin / python, das auf $ {prefix} /bin/pythonX.Y verweist.

Wenn Sie mehrere Versionen mit demselben Präfix installieren möchten, müssen Sie entscheiden, welche Version (falls vorhanden) Ihre "primäre" Version ist. Installieren Sie diese Version mit "make install". Installieren Sie alle anderen Versionen mit "make altinstall".

Wenn Sie beispielsweise Python 2.5, 2.6 und 3.0 mit 2.6 als Primärversion installieren möchten, führen Sie "make install" in Ihrem 2.6-Build-Verzeichnis und "make altinstall" in den anderen aus.

Jetzt möchte ich mein selbst installiertes 2.7.9 deinstallieren.

  1. Zum Glück habe ich noch den Quellcode, aber leider hat das Makefile keinen Deinstallationsbereich

    $ sudo make uninstall
    make: *** No rule to make target `uninstall'.  Stop.
  2. Dann habe ich einen anderen Weg ausprobiert: erst eine Deb aus dem Quellcode und der Kompilierung erstellen, die Deb installieren (hoffentlich die installierten Dateien überschreiben make altinstall) und dann die Deb deinstallieren.

    Aber wenn ich die Deb-Datei von erstelle checkinstall, bin ich mir nicht sicher, ob und wie ich das anders machen soll als make altinstallfür make install. Was ich versucht habe ist:

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

    Ich frage mich, wie ich eine Deb erstellen kann, damit die Installation der Deb den Installationsprozess von dupliziert make altinstall.

  3. Oder wie deinstallieren Sie meinen Python 2.7.9?

Hinweis: das Quellpaket in der ersten Verbindung hat auch setup.py, install-shneben README.

Tim
quelle
Python wird nicht an so vielen Orten installiert. Ich würde nur die Dateien manuell entfernen.
Faheem Mitha
Danke. Was sind das dann nicht viele Orte?
Tim
Schauen Sie sich eines der Binärpakete an. Es sind im Wesentlichen die gleichen Orte, denke ich, außer dass /usr/localsie stattdessen verwendet werden /usr. dpkg -L python2.7und dpkg -L python2.7-minimal. Und wofür brauchst du 2.7.9?
Faheem Mitha
Ich habe gehört, dass es standardmäßig pip hat. Aber nach der Installation finde ich nicht, dass es Pip hat.
Tim,
Sie können pip installieren apt-get install python-pip.
Faheem Mitha

Antworten:

20

Die folgenden Befehle entfernen Ihre make altinstall-ed-Python:

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

Möglicherweise müssen Sie auch tun

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

Obwohl make altinstalles mir gut getan hat, wenn das "System Python" eine andere major.minor-Nummer hat als die, die Sie installiert haben, funktioniert es nicht so gut, wenn sich nur die Micro-Nummer (die dritte Position) unterscheidet. Diese Nummer ist von der installierten Binärdatei ausgeschlossen, und Sie haben am Ende zwei Versionen von pythonX.Y. Dies war immer ein Problem, aber sobald Distributionen mit Systemdienstprogrammen auf Basis von 2.7.X ausgeliefert wurden, war dieses Problem schwerwiegender, da 2.7 das letzte der Python2-Serie sein soll.

IMO ist der beste Weg, um dieses Problem zu lösen, zu verhindern, dass es eins wird: Konfigurieren Sie Python so, dass es in einem Verzeichnis installiert wird, das von keinem anderen Python verwendet wird. Auf meinem System gehen sie unter /opt/python/X.Y.Z.

Um eines der dort installierten Pythons zu verwenden, erstellen Sie [virualenv][1]eine neue Umgebung:

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

oder verwenden [virtualenvwrapper][2] . Ich habe einige Aliase für die neuesten Versionen in der Reihe, mit der ich arbeite.

Wenn Sie toxzum Testen mehrerer Versionen verwenden (sollten Sie dies tun), hilft der folgende Alias ​​dabei, die verschiedenen Versionen zu finden:

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'

(Dies sind derzeit die neuesten Versionen. Ich verwende ein etwas anderes Setup, indem ich Verknüpfungen /opt/python/2.7zu den neuesten /opt/python/2.7.9und auch zu den anderen kleineren Nummern im Rahmen des Herunterladens, Erstellens und Installierens einer neuen Python-Version verwende.)

Diese Installationen werden niemals direkt verwendet. Sie werden immer nur als Grundlage für virtualenvUmgebungen verwendet, daher ist es mir egal, dass sie sich nicht in meinem normalen PFAD befinden.

Anthon
quelle
2
Löschen Sie nicht /usr/local/lib/python2.7! Alle von pip installierten globalen Python-Module befinden sich in /usr/local/lib/python2.7/dist-packages. Alle diese Module werden brechen!
Abhaga
2
@abhaga Du solltest nicht mit pipaußerhalb von a virtualenvauf einer Linux-Installation installieren
Anthon
Wir sollten Pakete auch nicht deinstallieren, indem wir Dateien und Verzeichnisse manuell entfernen. :) Dies sind gute Praktiken und es gibt immer Gelegenheiten, in denen wir sie brechen müssen. Es ist jedoch wichtig zu wissen, dass das Entfernen dieses Verzeichnisses nicht sicher ist.
Abhaga
In meinem CentOS7 gibt es einige Unterschiede: 1. include sollte sein: /usr/local/include/python2.7, ohne bin; 2. Die Man-Datei lautet /usr/local/share/man/man1/python2.7.1. 3. Eine andere Datei: /usr/local/bin/python2.7-config
Bin S
7

Ausgehend von der rmListe von @ Anthon und unter Anwendung von @ bin-s Ratschlägen für die Suche nach neueren Dateien habe ich dieses Bash-Skript erstellt, um mein Python-3.6.6 (das aus Quellen mit installiert wurde make altinstall) vollständig zu löschen :

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.

Gehen Sie vorsichtig vor (fügen Sie z. B. die -IOption in rm cmd hinzu, um jeden Kill zu überprüfen).

Ankostis
quelle
Sehr schön. Jetzt wird python3.X nicht angezeigt, wenn ich python3 eingebe und tab drücke
Prometheus
1

Normalerweise sind alle Dateien in fast einer Minute installiert. Sie können "find" verwenden, um alle installierten Dateien fast gleichzeitig zu überprüfen und sie dann manuell "rm". Wünsche es hilfreich.

find /usr/local/ -type f -newer <some latest old file>
Bin S
quelle