100 votes

Mise à niveau vers Ubuntu 20.04, Python manquant libffi.so.6

J'ai récemment mis à niveau mon OS vers Ubuntu 20.04 LTS.

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

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

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

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

1 votes

Vous pouvez essayer de réinstaller python3-numpy

0 votes

Si cela peut aider, vous pouvez rechercher les paquets Ubuntu en ligne. Par exemple, recherchez des noms de fichiers contenant libffi.so sur Focal, amd64.

0 votes

Voir stackoverflow.com/q/65000467/12544391 des rubyistes, par exemple en ajoutant gem "ffi" à Gemfile corrige cela

94voto

Kh4zit Points 1516

Il semble que j'ai réparé cela. Je pourrais me tromper, mais voici ce que je pense s'est passé :

  1. Ubuntu 20.04 a mis à niveau libffi6 en libffi7
  2. Python recherche toujours libffi6

Ce que j'ai fait pour le réparer :

Localisez libffi.so.7 dans votre système

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

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

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

MISE À JOUR :

Comme l'ont souligné de nombreux utilisateurs, cette correction pourrait avoir des conséquences inattendues. La meilleure façon de procéder est de réinstaller python comme l'a expliqué @amichaud. 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.

89voto

amichaud Points 64

Si vous utilisez pyenv, vous devriez simplement désinstaller la version de 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.

4 votes

Voici la bonne façon de le faire - falsifier une version de librairie est une option de dernier recours et pourrait avoir des conséquences involontaires.

13 votes

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

0 votes

Réinstaller Python est la clé, que ce soit avec pyenv ou autrement. Python trouvera la bibliothèque mise à jour lors de sa construction.

73voto

antisa Points 461

Je utilise Xubuntu 20.04 et recompiler la version Python 3.7 n'a pas fonctionné pour moi.

La façon dont j'ai résolu cela a été 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 de l'installer

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

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

Autant que j'ai pu voir, cela ne remplace aucun fichier donc cela devrait être sûr.

Étape supplémentaire pour Ubuntu 22.04 Conformément au commentaire de pijing ci-dessous, vous devez exécuter cette commande après avoir installé ce qui précède :

apt install libffi-devel

Ensuite, recompilez Python.

20voto

sushmita wable Points 201

Ubuntu 20 a libffi7 installé à la place. Il est possible d'installer la version précédente en venant d'Ubuntu 19.10 (Eoan Ermine) télécharger d'ici Ou vous pouvez suivre ces commandes

$ curl -LO http://archive.ubuntu.com/ubuntu/pool/main/libf/libffi/libffi6_3.2.1-8_amd64.deb

$ sudo dpkg -i libffi6_3.2.1-8_amd64.deb

3voto

vlad-ardelean Points 1885

Même problème pour moi

  1. Passé à Ubuntu 20
  2. pip ne fonctionnait plus (même erreur)

Ce que j'ai fait était :

  1. Supprimer l'environnement virtuel que j'utilisais
  2. Le recréer

En effet, je n'ai pas pu faire un pip freeze pour sauvegarder mes dépendances (car pip ne fonctionnait pas), mais heureusement je m'en fichais.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X