37
votes

Mise à jour d'Ubuntu 20.04, libffi.so.6 manquant pour Python

J'ai récemment mis à niveau mon système d'exploitation vers Ubuntu 20.04 LTS.

Maintenant, lorsque j'essaye d'importer une bibliothèque comme Numpy en Python, j'obtiens l'erreur suivante:

sudo apt-get install libffi
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package libffi

J'ai essayé d'installer le paquet libffi , mais apt ne peut pas le localiser:

ImportError: libffi.so.6: cannot open shared object file: No such file or directory


2 commentaires

Vous pouvez essayer de réinstaller python3-numpy


Si cela vous aide, vous pouvez rechercher des packages Ubuntu en ligne . Par exemple, recherchez les noms de fichiers contenant libffi.so sur Focal, amd4


6 Réponses :


-1
votes

C'est probablement le paquet libffi6 que vous voulez, qui installe un libffi.so.6 .

sudo apt-get install libffi6


2 commentaires

libffi6 n'est pas disponible pour 20.04 , mais libffi7 l' est. Je pense qu'OP devra réinstaller NumPy, ou le reconfigurer d'une manière ou d'une autre - pas sûr.


Oui, vous avez raison, j'ai publié un moyen de résoudre ce problème. Je ne sais pas si c'est la meilleure façon de le faire.



33
votes

Il semble que je l'ai réparé. Je peux me tromper, mais voici ce que je pense arrivé:

  1. Ubuntu 20.04 a mis à jour libffi6 vers libffi7
  2. Python est toujours à la recherche de libffi6

Ce que j'ai fait pour y remédier:

Localisez libffi.so.7 dans votre système

sudo ln -s /usr/path/to/libffi.so.7 /usr/lib/path/to/libffi.so.6

Créez un simlink nommé libffi.so.6 qui pointe vers libffi.so.7 :

$ find /usr/lib -name "libffi.so*"

MISE À JOUR:

Comme indiqué par de nombreux utilisateurs, ce correctif pourrait avoir des conséquences inattendues. La meilleure façon de le faire est de réinstaller python comme @amichaud l'a expliqué. Cela devrait être utilisé en dernier recours SI vous n'utilisez pas pyenv / virtualenv / etc, auquel cas la suppression de python entraînera également la suppression de nombreuses dépendances.


4 commentaires

Je serais très surpris si cela fonctionne réellement - la liaison symbolique d'une version d'une bibliothèque à une version différente semble susceptible de provoquer une instabilité. Reconstruire python semble être la bonne solution


Cela a fonctionné pour moi. Je suis conscient que ce n'est pas la façon la plus propre de le faire, mais de cette façon, vous pouvez éviter de réinstaller tous les packages / dépendances python. Concernant l'instabilité, je ne vois pas pourquoi c'est une "recette pour le désastre". Au pire, vous aurez juste besoin de revenir à la reconstruction de python. Cela dit, je suis prêt à changer la réponse acceptée si elle peut causer des problèmes plus préoccupants que je ne connais pas.


Quand vous dites fonctionne bien que vous semblez vouloir dire ne plante pas au démarrage. Vous ne pouvez pas savoir si python se comporte légèrement différemment de ce qu'il devrait parce que vous appelez la mauvaise bibliothèque, des différences subtiles d'exécution pourraient se produire, ce qui serait impossible à détecter. Plus facile mais ennuyeux serait un crash à un moment aléatoire dans le futur car finalement un certain code python entraîne un appel à la lib qui a suffisamment changé pour échouer de manière évidente.


Si vous voulez éviter de «perdre» vos paquets installés, faites simplement pip freeze > backup.txt , supprimez les installations Python, réinstallez-les et utilisez pip install -r backup.txt et vous serez de retour à votre état d'origine



35
votes

Si vous utilisez pyenv, vous devez simplement désinstaller la version python utilisée, puis la réinstaller.

Exemple:

pyenv uninstall 3.7.4
pyenv install 3.7.4

C'est plus propre et plus sûr que de renommer la bibliothèque système de mon point de vue.


7 commentaires

C'est la bonne façon de le faire - simuler une version lib est une option de dernier recours et pourrait avoir des conséquences inattendues.


même pyenv install 3.7.4 -f qui permet de ne pas recréer virtualenvs


La réinstallation de Python est le ticket, que ce soit avec pyenv ou autrement. Python trouvera la bibliothèque mise à jour lors de sa construction.


Cela devrait vraiment être la meilleure réponse / acceptée! symlinking une bibliothèque différente semble être une recette pour un désastre


PS, je devais supprimer et réinstaller pyenv


Cela devrait certainement être la réponse acceptée car cela fonctionne avec (presque sûrement) aucune conséquence involontaire.


Lorsque j'exécute pyenv uninstall 3.8.6 (ma version actuelle de python), j'obtiens cette erreur: pyenv: version `3.8.6' not installed



20
votes

J'utilise Xubuntu 20.04 et la recompilation de la version 3.7 de python n'a pas fonctionné pour moi.

La façon dont j'ai résolu ce problème était de télécharger la version 19.10 du package à partir d'ici: http://mirrors.kernel.org/ubuntu/pool/main/libf/libffi/libffi6_3.2.1-8_amd64.deb

puis l'installer

sudo apt install ./libffi6_3.2.1-8_amd64.deb

Cela décompressera les fichiers libffi.so.6 et libffi.so.6.0.4 dans /usr/lib/x86_64-linux-gnu/ . Le fichier libffi.so.6 est juste un lien vers libffi.so.6.0.4 dans le même répertoire.

Pour autant que je puisse voir, cela n'écrase aucun fichier et devrait donc être sûr.

Espérons que cela aide aussi quelqu'un.


0 commentaires

0
votes

Même problème pour moi

  1. Mise à niveau vers ubuntu 20
  2. pip ne fonctionnait plus (même erreur)

Ce que j'ai fait était:

  1. supprimé l'environnement virtuel que j'utilisais
  2. l'a recréé
  3. Bien sûr, je n'ai pas pu faire un pip freeze pour enregistrer mes dépendances (car pip ne fonctionnait pas), mais heureusement, je m'en fichais.

0 commentaires

0
votes

J'ai eu le même problème (lorsque j'ai mis à niveau vers Ubuntu 20.04) lorsque j'ai essayé d'exécuter Jupyter Notebook.

Étape 1) -> Réinstallez simplement python3.7.6 (la version que j'utilisais):

    $ pip3.7 install jupyterlab
    $ pip3.7 install notebook
  • Refaites le processus d'installation:
    $ ./configure --enable-optimizations
    $ make
    $ sudo make install

  1. Étape 2: désinstallez jupyter. J'ai utilisé la désinstallation de pip3.7 ... Voir: Comment désinstaller le carnet de notes Jupyter installé par pip3

  2. Étape 3: réinstallez jupyter à nouveau:

$ cd path_to_python3.7_folder

Essayez à nouveau d'exécuter jupyter. Ça devrait marcher.


0 commentaires