désinstaller Python installé en compilant la source?

18

J'ai installé Python 2.7.9 sur Ubuntu 14.04 en compilant sa source , par .configre, makeet make altinstall. make altinstallest parce que je ne veux pas écraser le Python 2.7.6 par défaut. Mon auto-installé 2.7.9 est dans /usr/local/bin/python2.7et de nombreux autres fichiers dans d'autres répertoires sous /usr/local. À partir 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 exécutable python principal n'est pas remplacé 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 comme version principale, vous exécuterez "make install" dans votre répertoire de construction 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, le 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 make altinstall), puis désinstaller 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 altinstallde 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, en install-shplus README.

StackExchange pour tous
la source
Python ne s'installe pas dans tant d'endroits. Je voudrais simplement supprimer les fichiers manuellement.
Faheem Mitha
merci. Quels sont donc ces rares endroits?
StackExchange pour tous
Jetez un œil à l'un des packages binaires. Ce sont essentiellement les mêmes endroits, je pense, sauf qu'ils /usr/localsont utilisés à la place de /usr. dpkg -L python2.7et dpkg -L python2.7-minimal. Et de quoi avez-vous besoin 2.7.9?
Faheem Mitha
J'ai entendu dire qu'il avait pip par défaut. Mais après l'installation, je ne trouve pas qu'il y a de pip.
StackExchange pour tous
Vous pouvez installer pip apt-get install python-pip.
Faheem Mitha

Réponses:

20

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

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 cela make altinstallm'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 numéro micro (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 tombent /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 toxpour tester contre 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.7la dernière à la dernière /opt/python/2.7.9, et pour les autres numéros mineurs également, dans le processus de téléchargement, de construction et d'installation d'une nouvelle version de python)

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

Anthon
la source
2
Ne supprimez pas /usr/local/lib/python2.7! Tous les modules python globaux installés par pip live dans /usr/local/lib/python2.7/dist-packages. Tous ces modules vont casser!
abhaga
2
@abhaga Vous ne devez pas installer avec en pipdehors d'un virtualenvsur une installation Linux
Anthon
Nous ne devons pas non plus désinstaller les packages en supprimant manuellement les fichiers et répertoires. :) Ce sont de bonnes pratiques et il y a toujours des occasions où nous devons les briser. Mais il est important de savoir qu'il n'est pas sûr de supprimer ce répertoire.
abhaga
Dans mon CentOS7, il y en a différents: 1. include devrait être: /usr/local/include/python2.7, sans bin; 2. le fichier man est /usr/local/share/man/man1/python2.7.1; 3. Un autre fichier: /usr/local/bin/python2.7-config
Bin S
7

En partant de la rmliste 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 l' -Ioption dans rm cmd pour vérifier chaque kill).

ankostis
la source
très agréable. Maintenant, python3.X ne s'affiche pas lorsque je tape python3 et que je tape tab
Prometheus
1

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>
Bacs
la source