odinstalować Python zainstalowany przez kompilację źródła?

18

Po zainstalowaniu Python 2.7.9 na Ubuntu 14.04 kompilując jego źródła , o .configre, makei make altinstall. make altinstallto dlatego, że nie chcę zastępować domyślnego języka Python 2.7.6. Moje samodzielnie zainstalowane 2.7.9 jest w, /usr/local/bin/python2.7a wiele innych plików w innych katalogach pod /usr/local. Z README w źródłowym pakiecie instalacyjnym:

W systemach Unix i Mac, jeśli zamierzasz zainstalować wiele wersji Pythona przy użyciu tego samego prefiksu instalacyjnego (argument --prefix w skrypcie konfiguracyjnym), musisz uważać, aby instalacja podstawowego pliku Python nie została nadpisana przez instalację innej wersji.

Wszystkie pliki i katalogi instalowane przy użyciu polecenia „make altinstall” zawierają wersję główną i pomocniczą, dzięki czemu mogą żyć obok siebie. „make install” tworzy również $ {prefix} / bin / python, który odnosi się do $ {prefix} /bin/pythonX.Y.

Jeśli zamierzasz zainstalować wiele wersji przy użyciu tego samego prefiksu, musisz zdecydować, która wersja (jeśli istnieje) jest wersją „podstawową”. Zainstaluj tę wersję za pomocą polecenia „make install”. Zainstaluj wszystkie pozostałe wersje za pomocą polecenia „make altinstall”.

Na przykład, jeśli chcesz zainstalować Python 2.5, 2.6 i 3.0 z wersją podstawową 2.6, wykonaj „make install” w katalogu kompilacji 2.6, a „make altinstall” w pozostałych.

Teraz chcę odinstalować moją samodzielnie zainstalowaną wersję 2.7.9.

  1. Na szczęście nadal mam kod źródłowy, ale niestety w Makefile nie ma sekcji odinstalowywania

    $ sudo make uninstall
    make: *** No rule to make target `uninstall'.  Stop.
  2. Potem spróbowałem w inny sposób: najpierw utwórz deb ze źródła i kompilacji, zainstaluj deb (mam nadzieję, że zastąpisz zainstalowane pliki make altinstall), a następnie odinstaluj deb.

    Ale kiedy tworzę plik deb checkinstall, nie jestem pewien, czy i jak powinienem zrobić inaczej dla make altinstallfor make install. Spróbowałem:

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

    Zastanawiam się, jak mogę utworzyć deb, aby jego instalacja zduplikowała proces instalacji make altinstall?

  3. Lub w jaki sposób odinstalowujesz moje python 2.7.9?

Uwaga: pakiet źródłowy w pierwszym linku ma również setup.py, install-shoprócz README.

StackExchange dla wszystkich
źródło
Python nie instaluje się w tak wielu miejscach. Po prostu usunęłbym pliki ręcznie.
Faheem Mitha,
dzięki. co to za mało miejsc?
StackExchange dla wszystkich
Spójrz na jeden z pakietów binarnych. Sądzę, że /usr/localsą to w zasadzie te same miejsca, z wyjątkiem tego, że używa się ich zamiast /usr. dpkg -L python2.7a dpkg -L python2.7-minimal. A do czego potrzebujesz 2.7.9?
Faheem Mitha
Słyszałem, że ma domyślnie pip. Ale po instalacji nie widzę, że ma pip.
StackExchange dla wszystkich
Możesz zainstalować pip apt-get install python-pip.
Faheem Mitha

Odpowiedzi:

20

Następujące polecenia usuną twój 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

Być może będziesz musiał zrobić

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

Chociaż make altinstalldobrze mi służyło, jeśli „python systemowy” ma inny numer główny. Mniejszy niż ten, który instalujesz, nie działa tak dobrze, jeśli różni się tylko liczba mikro (trzecia pozycja). Ta liczba jest wykluczona z zainstalowanego pliku binarnego, a kończysz na dwóch wersjach pythonX.Y. Był to zawsze problem, ale gdy dystrybucje zaczęły być dostarczane z narzędziami systemowymi opartymi na wersji 2.7.X, problem ten był poważniejszy, ponieważ wersja 2.7 ma być ostatnią z serii Python2.

IMO najlepszym podejściem do rozwiązania tego problemu jest zapobieganie, aby stał się jednym: skonfiguruj Pythona, aby instalował w katalogu nieużywanym przez żaden inny python. W moim systemie idą pod ziemię/opt/python/X.Y.Z .

Aby użyć dowolnego z zainstalowanych tam Pythonów, musisz [virualenv][1]stworzyć nowe środowisko:

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

albo użyj [virtualenvwrapper][2] . Mam kilka aliasów dla najnowszych wersji w serii, z którą pracuję.

Jeśli używasz toxdo testowania wielu wersji (powinieneś), następujący alias pomoże mu znaleźć różne wersje:

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'

(są to obecnie najnowsze wersje, używam nieco innej konfiguracji, utrzymując linki od /opt/python/2.7do najnowszej/opt/python/2.7.9 , a także dla innych mniejszych numerów, w ramach procesu pobierania, budowania i instalowania nowej wersji Pythona)

Te instalacje nigdy nie są używane bezpośrednio. Są zawsze używane jako podstawa virtualenvtylko dla środowisk, dlatego nie dbam o to, że nie są w mojej normalnej ŚCIEŻCE.

Anthon
źródło
2
Nie usuwaj /usr/local/lib/python2.7! Wszystkie globalne moduły Pythona zainstalowane przez pip live w /usr/local/lib/python2.7/dist-packages. Wszystkie te moduły się zepsują!
abhaga
2
@abhaga Nie należy instalować z instalacją pippoza linuksem virtualenvna żadnej instalacji Linuksa
Anthon
Nie powinniśmy również odinstalowywać pakietów poprzez ręczne usuwanie plików i katalogów. :) To dobre praktyki i zawsze są chwile, kiedy musimy je złamać. Ale ważne jest, aby wiedzieć, że usunięcie tego katalogu nie jest bezpieczne.
abhaga
W moim CentOS7 są różne: 1. include powinny być: /usr/local/include/python2.7, bez bin; 2. plik man to /usr/local/share/man/man1/python2.7.1; 3. Kolejny plik: /usr/local/bin/python2.7-config
Bin S
7

Zaczynając od rmlisty @ Anthon i stosując porady @ bin-s do wyszukiwania nowszych plików, wymyśliłem ten skrypt bash, aby całkowicie wyczyścić mój Python-3.6.6 (który został zainstalowany ze źródeł 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.

Używaj go ostrożnie (np. Dodaj -Iopcję w rm cmd, aby zweryfikować każde zabicie).

ankostis
źródło
bardzo dobrze. Teraz python3.X nie pojawia się, gdy piszę python3 i wciskam Tab
Prometheus
1

Zwykle wszystkie pliki są instalowane w ciągu prawie jednej minuty. Możesz użyć polecenia „znajdź”, aby sprawdzić wszystkie zainstalowane pliki prawie w tym samym czasie, a następnie „ręcznie”. Życzę pomocy.

find /usr/local/ -type f -newer <some latest old file>
Bin S
źródło