Cette erreur se produit souvent lorsqu'une version plus récente de python a été installée à côté d'une version plus ancienne, par exemple ;
- Ubuntu 18.04.1 est livré avec la version 3.6.6 de python.
- Installé ppa:deadsnakes/python3.7.1 ou une alternative
-
Exécutez une commande qui utilise le module apt_pkg et obtenez une erreur telle que ;
from CommandNotFound.db.db import SqliteDatabase
File "/usr/lib/python3/dist-packages/CommandNotFound/db/db.py", line 5, in <module>
import apt_pkg
Lorsque nous installons une version non-distro de python3 avec apt, le répertoire des modules partagés sera celui de python3 ; le plus souvent, il s'agit de /usr/lib/python3
.
La plupart du temps, tout va bien, mais dans certaines circonstances, les différentes versions de python s'appuient sur des bibliothèques ou des objets partagés différents de ceux de l'autre version de python, donc comme d'autres réponses l'ont souligné, nous devons lier le .SO à la bonne version de python. Ainsi, si nous avons installé python3.6 sur un système 64 bits, le lien apt_pkg .SO sera le suivant
sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
Mais le problème réside dans le fait que lorsque nous installons une version plus récente de python, le lien sera mis à jour pour pointer vers la version la plus récente de python, ce qui conduit à l'erreur du module apt_pkg non trouvé. En vérifiant quelle version de python est livrée avec votre distro, vous pouvez créer le lien comme indiqué ci-dessus. Ou bien nous utilisons une méthode qui offre à la commande un choix de versions de python pour lier le .SO, par exemple ;
sudo ln -s apt_pkg.cpython-{36m,35m,34m}-x86_64-linux-gnu.so apt_pkg.so
Comme python créera ce lien vers la dernière version installée de python, nous donnons à la commande l'option de choisir entre 3 versions de python, parmi lesquelles elle choisira la plus haute version donnée.