web-dev-qa-db-fra.com

Problèmes avec les dépendances apt après l'installation de python 3.5

J'ai téléchargé et compilé le dernier python 3.5 et je l'ai installé avec checkinstall. Maintenant, je reçois une tonne de paquets qui ont des dépendances manquantes dans apt.

apt-xapian-index : Depends: python (< 2.8) but 3.5.0-1 is to be 

installed
 duplicity : Depends: python (< 2.8) but 3.5.0-1 is to be installed
 gconf2 : Depends: python:any
 .
 .
 .
 totem-plugins : Depends: python:any (>= 2.6.6-7~)
 ubuntu-system-service : Depends: python (< 2.8) but 3.5.0-1 is to be installed
                         Depends: python:any (>= 2.7.1-0ubuntu2)
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

Mais j’ai toujours python installé, y compris 2.7.9.

$ which python
/usr/bin/python
$ python
Python 2.7.9 (default, Apr  2 2015, 15:33:21) 
[GCC 4.9.2] on linux2

$ which python3
/usr/local/bin/python3
$ python3
Python 3.5.0 (default, Sep 13 2015, 19:47:21) 
[GCC 4.9.2] on linux

Comment puis-je supprimer le paquet que j'ai installé ou réparer les dépendances ne voyant pas que python3 est installé?

De plus, python3.4 est toujours à /usr/bin/python3

EDIT: Je vois qu'il veut que je fasse apt-get -f install mais cela enlève une tonne de choses et je ne pense vraiment pas que ce soit la bonne façon de le réparer.

5
Jared Mackey

Dieu merci, j'ai pu le réparer. J'avais peur de devoir réinstaller Ubuntu.

Je suis allé et manuellement édité /var/lib/dpkg/status et supprime l'entrée qui a été faite par le checkinstall.

Une fois que cela a été supprimé, je suis allé dans /usr/local/bin et j'ai supprimé tous les éléments python 3.5. Je me suis également assuré que python3-4 était toujours dans /usr/bin/. Ensuite, j'ai fait un Sudo dpkg-reconfigure -a et finalement un apt-get -f install et il n'y avait qu'une seule chose "manquante", à savoir le python.

Ensuite, j'ai réussi à le faire installer correctement en suivant les instructions du README, puis en supprimant simplement le lien symbolique vers python3.4 et en créant un nouveau lien vers python3.5.

5
Jared Mackey

J'ai eu le même problème après avoir installé python3.4 avec checkinstall (au lieu de python3.5 pour electrometro)

Raison pour laquelle ce problème se produit

J'ai découvert pourquoi ce problème s'est produit à la première place.

Lors de la création du fichier .deb à partir de la source Python 3.4 avec checkinstall qui l'installe ensuite, le nom de package par défaut défini par checkinstall est " python ".

Par conséquent, checkinstall désinstalle le paquet nommé python avant d'installer le nouveau en utilisant dpkg !! Ce paquet existe déjà dans Ubuntu. Il est fondamentalement lié à python2! Pour une raison quelconque, je pense que dpkg essaie de supprimer la version de python que vous installez, c'est-à-dire python3.4 dans mon cas mais échoue. C'est pourquoi python2 est toujours installé. Mais dpkg croit toujours que le paquet " python " a été supprimé et remplacé par le nouveau paquet installé (python3.4). Le fichier/var/lib/dpkg/status a été modifié en conséquence. Dans mon cas, voici la mise à jour liée à cette installation:

Paquetage: python
Statut: deinstall ok installé
Priorité: extra
Section : Checkinstall
Taille installée: 167520
Mainteneur: root @ laptop
Architecture: AMD64
Version: 3.4.3-1
Fournit: python
Description: Package créé avec checkinstall 1.6.2`

Comme vous pouvez le voir en gras, le nom du paquet est " python " et le paquet a été " deinstall "avant d’être installé à nouveau.

Ainsi, dpkg pense que " python " (python2!) N'existe plus et vous suggère de supprimer tout ce qui en dépend lorsque vous appelez apt-get -f install !

Solution pour éviter ce problème:

Choisissez simplement un nom de "Package" et un nom "Fournis" différents lorsque vous utilisez checkinstall! Par exemple, python3.4-checkinstall pour les deux.

Comment résoudre le problème quand il s'est déjà produit

Pour résoudre ce gâchis, j'ai une solution qui vous permet de ne pas avoir à supprimer manuellement tous les fichiers binaires installés, comme le suggère electrometro, ce qui pourrait être dangereux.

Suivez ces étapes:

  1. Modifiez manuellement le nom du package python dans /var/lib/dpkg/status de python à python-3.4-checkinstall par exemple. Faites attention. Le nouveau nom ne doit pas avoir déjà été utilisé! Remplacez également "Fournit" par le nouveau nom.
  2. Utilisez Sudo dpkg-reconfigure python-3.4-checkinstall. (Remarque: dpkg-reconfigure -a comme suggéré electrometro n'existe plus dans Ubuntu 16.04. De toute façon, il n'est pas nécessaire).
  3. Exécutez apt-get -f install pour installer à nouveau le package python d'origine! A ce stade, vous pouvez vous arrêter ici, mais si vous essayez Sudo dpkg-query -L python3.4-checkinstall: dpkg ne sait plus quels fichiers ont été installés !!! Parce que le fichier /var/lib/dpkg/info/python3.4-checkinstall.list n'existe pas! Le fichier /var/lib/dpkg/info/python.list a été remplacé par apt-get -f install. Voir le documentation Debian pour plus d’informations sur dpkg. Pour résoudre ce problème, vous devez effectuer l’étape 4.
  4. Réinstallez python3.4 à partir de zéro en utilisant checkinstall, mais sans oublier de changer le nom du "Package" et le nom du "Fournit" comme suggéré précédemment! Utilisez le même nom qu'à l'étape 1. Il n'est pas nécessaire de supprimer les fichiers binaires manuellement avant de le faire. Le but de cette étape est d’avoir une nouvelle installation de python3.4 et de pouvoir le désinstaller en utilisant le fichier .deb nouvellement créé.

Et c'est tout! Tout devrait être propre maintenant. En fait, j'ai exécuté l'étape 3 avant l'étape 2, mais il devrait être plus propre de le faire de cette façon.

Pour info, l'étape que j'ai utilisée pour installer python3.4 à partir du paquet source en utilisant checkinstall est la suivante:

  1. Dans le répertoire source, exécutez ./configure.
  2. Exécuter make
  3. Exécuter Sudo checkinstall
  4. Étape la plus importante . À ce stade, ils vous demandent si vous souhaitez modifier un champ avant de l'installer. Modifiez "Package" et "Fournit" de "python" en un nom unique différent (comme "python3.4-checkinstall", comme je l'ai suggéré).

J'espère que ça aide!

A bientôt, Nicolas

3
N. Gimenez