web-dev-qa-db-fra.com

désinstaller Python installé en compilant la source?

J'ai installé Python 2.7.9 sur Ubuntu 14.04 en compilant sa source , par .configre, make et make altinstall. make altinstall est parce que je ne veux pas écraser la valeur par défaut Python 2.7.6. Mon auto-installé 2.7.9 est dans /usr/local/bin/python2.7 et de nombreux autres fichiers dans d'autres répertoires sous /usr/local. De README dans le package d'installation source:

Sur les systèmes Unix et Mac si vous avez l'intention d'installer plusieurs versions de Python en utilisant le même préfixe d'installation (argument --prefix du script de configuration), vous devez vous assurer que votre principal python n'est pas écrasé par l'installation d'une version différente.

Tous les fichiers et répertoires installés à l'aide de "make altinstall" contiennent la version principale et la version mineure et peuvent ainsi vivre côte à côte. "make install" crée également $ {prefix}/bin/python qui fait référence à $ {prefix} /bin/pythonX.Y.

Si vous avez l'intention d'installer plusieurs versions en utilisant le même préfixe, vous devez décider quelle version (le cas échéant) est votre version "principale". Installez cette version en utilisant "make install". Installez toutes les autres versions en utilisant "make altinstall".

Par exemple, si vous souhaitez installer Python 2.5, 2.6 et 3.0 avec 2.6 étant la version principale, vous exécuterez "make install" dans votre répertoire de compilation 2.6 et "make altinstall" dans les autres .

Maintenant, je veux désinstaller ma version 2.7.9 auto-installée.

  1. Heureusement, j'ai toujours le code source, mais malheureusement, la Makefile n'a pas de section de désinstallation

    $ Sudo make uninstall
    make: *** No rule to make target `uninstall'.  Stop.
    
  2. Ensuite, j'ai essayé une autre façon: d'abord créer un deb à partir de la source et de la compilation, installer le deb (en remplaçant, espérons-le, les fichiers installés de make altinstall), puis désinstallez le deb.

    Mais quand je crée le fichier deb par checkinstall, je ne sais pas si et comment je dois faire différemment pour make altinstall de pour make install. Ce que j'ai essayé c'est:

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

    Je me demande comment je peux créer un deb pour que son installation reproduise le processus d'installation de make altinstall?

  3. Ou quelle est votre façon de désinstaller mon python 2.7.9?

Remarque: le paquet source dans le premier lien a également setup.py, install-sh outre README.

20
Tim

Les commandes suivantes supprimeront votre 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

Vous devrez peut-être aussi faire

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

Bien que make altinstall m'a bien servi si le "système python" a un numéro major.minor différent de celui que vous installez, cela ne fonctionne pas si bien que seul le micro numéro (la troisième position) diffère. Ce nombre est exclu du binaire installé et vous vous retrouvez avec deux versions pythonX.Y. Cela a toujours été un problème, mais une fois que les distributions ont commencé à être livrées avec des utilitaires système basés sur 2.7.X, ce problème a été plus grave car 2.7 est censé être le dernier de la série Python2.

IMO la meilleure approche pour résoudre ce problème est de l'empêcher d'en devenir un: configurez python pour l'installer dans un répertoire qui n'est utilisé par aucun autre python. Sur mon système ils vont sous /opt/python/X.Y.Z.

Pour utiliser l'un des Pythons qui y sont installés, vous utilisez [virualenv][1] pour créer un nouvel environnement:

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

ou utiliser [virtualenvwrapper][2]. J'ai quelques alias pour les dernières versions de la série avec laquelle je travaille.

Si vous utilisez tox pour effectuer des tests sur plusieurs versions (vous devriez) l'alias suivant l'aidera à trouver les différentes versions:

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'

(ce sont actuellement les dernières versions, j'utilise une configuration légèrement différente en conservant les liens de /opt/python/2.7 au plus tard /opt/python/2.7.9, ainsi que pour les autres numéros mineurs, dans le cadre du processus de téléchargement, de création et d'installation d'une nouvelle python)

Ces installations ne sont jamais utilisées directement. Ils sont toujours utilisés comme base pour les environnements virtualenv uniquement, donc je m'en fiche qu'ils ne soient pas dans mon PATH normal.

21
Anthon

En partant de la liste rm de @ Anthon et en appliquant les conseils de @ bin-s pour rechercher des fichiers plus récents, j'ai trouvé ce script bash pour effacer complètement mon Python-3.6.6 (qui avait été installé à partir de sources avec 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.

Utilisez-le avec précaution (par exemple, ajoutez -I option dans rm cmd pour vérifier chaque kill).

10
ankostis

Habituellement, tous les fichiers sont installés en presque une minute. Vous pouvez utiliser "find" pour vérifier tous les fichiers installés presque en même temps, puis les "rm" manuellement. Je le souhaite utile.

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

J'ai fini par faire ce qui suit:

  1. reconstruire et installer Python vous souhaitez désinstaller en utilisant un préfixe personnalisé, disons $HOME/opt/Python-3.8.0: tar tJf Python-3.8.0.tar.xz && cd Python-3.8.0 && ./configure --prefix $HOME/opt/Python-3.8.0 && make && make install
  2. cd $HOME/opt/Python-3.8.0 && find * -type f | Perl -pe's(^)(/usr/)' | Sudo xargs rm
  3. rm -rf ~/opt/Python-3.8.0
1