Supprimer un programme installé depuis les sources

Sans make uninstall disponible

a marqué ce sujet comme résolu.

Bonjour,

J'ai installé python 3.4.4 depuis le sources et maintenant j'aimerais bien pouvoir le désinstaller.

J'ai essayé la commande "sudo make uninstall" (dans le dossier avec les sources) mais cela ne fonctionne pas, Je tombe sur "make: *** No rule to make target 'uninstall'. Arrêt.". Cela signifie qu'il n'y a pas de cible dans ce programme pour faire la désinstallation (si j'ai bien compris).

Je suis vraiment obligé de chercher tous les fichiers du programme sur la machine et de les supprimer manuellement ? Il y a une autre méthode plus simple et plus sûre ?

Merci d'avance

Cordialement

Aïe. C'est pas bien parti. Normalement tu aurais pu regarder la règle install du Makefile pour voir quels fichiers ça a installé et les supprimer, mais là c'est Python qui n'est probablement pas le projet au Makefile le plus minimaliste … Par défaut quand on installe depuis les sources tout va dans /usr/local. Regarde donc dans les dossiers enfants de /usr/local pour chercher ce qui a trait à Python et passer ça à la trappe.

Pour Python en particulier j'aurais utilisé Anaconda: c'est une distribution Python pratique à utiliser avec un gestionnaire de paquets (conda) qui marche très bien. Pour ta version précise de Python, elle est pas dans Anaconda parce qu'ils ont sauté de 3.4.3 à 3.5.0rc4 par contre. J'utilise Anaconda pour éviter d'avoir à installer de paquets avec mon gestionnaire de paquets système en même temps que des paquets pip: c'est bien moins le bordel.

En général, quand j'installe un programme depuis les sources je vérifie l'existence de la règle uninstall mais de manière générale je préfère écrire un paquet vite fait (je suis sous Arch donc écrire un PKGBUILD ça va très vite). Sinon, l'alternative est d'utiliser stow et de donner le préfixe /usr/local/stow/nomdulogiciel au Makefile. Le rôle de stow est ensuite de créer des liens symboliques dans /usr/local pour que le logiciel soit bien dans le $PATH. Supprimer le paquet est alors trivial: il suffit de demander à stow de retirer ses liens et puis de supprimer le dossier /usr/local/stow/nomdulogiciel.

Pour plus d'informations sur stow, cet article devrait t'aider.

Merci à tous pour votre aide !
Je débute un peu avec Linux, c'est pas très facile ^^
J'ai effectivement oublié de préciser que j'utilise Debian 8.2

Normalement tu aurais pu regarder la règle install du Makefile pour voir quels fichiers ça a installé et les supprimer

C'est à dire ? Regarder une des variables dans le fichier MakeFile (présent dans le dossier des sources) qui indique où les fichiers du programme seront installés ?

Par défaut quand on installe depuis les sources tout va dans /usr/local

D'accord j'ai fait un coup de sudo find /usr/local -name "python*" -ok rm -r {} \;, et ça fonctionne. Ça avait l'air d'être une méthode propre pour supprimer. Il ne fallait juste pas supprimer python2 (/usr/local/lib/python2.7 qui a été crée lors à l'installation de l'os)

En général, quand j'installe un programme depuis les sources je vérifie l'existence de la règle uninstall

Je vais faire ça à l'avenir, un sudo make uninstall avant d'installer

de manière générale je préfère écrire un paquet vite fait (je suis sous Arch donc écrire un PKGBUILD ça va très vite). Sinon, l'alternative est d'utiliser stow et de donner le préfixe /usr/local/stow/nomdulogiciel au Makefile

D'accord, je vais essayer ces méthodes prochainement et retourner vers vous si j'ai des questions. Pour la méthode du PKGBUILD, c'est disponible que sur Arch Linux ?

+0 -0

Du coup tu as supprimé ta version python2.7 avec cette commande, ou il y a un /local de trop ?

Non, -ok rm -r {} \; me demande une confirmation avant chaque suppression ^^.
J'ai correctement supprimé tout ce qui était en rapport avec python 3.

J'ai essayé la méthode avec stow mais je tombe sur erreur lorsque de tape la commande sudo stow python3.4.4 dans /usr/local/stow

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Possible precedence issue with control flow operator at /usr/share/perl5/Stow.pm line 1736.
WARNING! stowing python3.4.4 would cause conflicts:
  * existing target is neither a link nor a directory: bin/2to3-3.4
  * existing target is neither a link nor a directory: bin/idle3.4
  * existing target is neither a link nor a directory: bin/pydoc3.4
  * existing target is neither a link nor a directory: bin/pyvenv-3.4
  * existing target is neither a link nor a directory: lib/libpython3.4m.a
  * existing target is not owned by stow: bin/2to3
  * existing target is not owned by stow: bin/idle3
  * existing target is not owned by stow: bin/pydoc3
  * existing target is not owned by stow: bin/pyvenv
All operations aborted.

Il s'avère qu'il s'agit d'un problème qui a été résolu il n'y a pas longtemps : https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=759326 mais ça n'a toujours pas été résolu chez moi :(

+0 -0

Merci pour ta réponse.
Dans le dossier /usr/local/stow/python351, j'ai supprimé les fichiers bin/pyvenv, bin/idle3, bin/pydoc3, bin/2to3, j'ai installé le package avec sudo stow python351 et python 3 s'est effectivement correctement installé ! :)
Par contre, je n'ai pas compris pourquoi il fallait supprimer ces fichiers ? Ils ont été crées lors du make install... non ?

+0 -0

Nooooooon ! Surtout pas ! C'était pas dans les dossiers de stow mais dans ceux dy système qu'il fallait supprimer ces fichiers. Je disais de supprimer /bin/venv… J'étais pas clair, désolé. Tu es bon pour recommencer make l'o install puis désinstaller python avec stow -R python351 puis supprimer les fichiers du système qui provoquent des conflits puis réinstaller python avec stow.

Puisque tu es sur une Debian il vaut mieux créer un paquet avec checkinstall que bidouiller avec stow.

+0 -0

D'accord pour stow, merci.

J'ai regardé comment créer des .deb avec checkinstall et j'ai essayé de créer un paquet pour Python 3. J'ai fait un ./configure, sudo make et sudo checkinstall. Je suis tombé sur cette erreur :

1
2
Creating directory /usr/local/lib/python3.5/config-3.5m
ranlib: n'a pu créer le fichier temporaire pendant l'écriture de l'archive: Aucun autre fichier d'archive

J'ai réussi à la résoudre facilement en faisant un sudo mkdir -p /usr/local/lib/python3.5/config-3.5m
cependant je tombe toujours sur un autre type d'erreur :(

1
2
3
4
creating /usr/local/lib/python3.5/lib-dynload
copying build/lib.linux-i686-3.5/fcntl.cpython-35m-i386-linux-gnu.so -> /usr/local/lib/python3.5/lib-dynload
error: [Errno 2] No such file or directory
Makefile:1432: recipe for target 'sharedinstall' failed

Avez-vous une idée ? Merci d'avance

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte