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
6 Réponses :
C'est probablement le paquet libffi6
que vous voulez, qui installe un libffi.so.6
.
sudo apt-get install libffi6
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.
Il semble que je l'ai réparé. Je peux me tromper, mais voici ce que je pense arrivé:
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.
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
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.
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
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.
Même problème pour moi
Ce que j'ai fait était:
pip freeze
pour enregistrer mes dépendances (car pip ne fonctionnait pas), mais heureusement, je m'en fichais.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
$ ./configure --enable-optimizations $ make $ sudo make install
É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
Étape 3: réinstallez jupyter à nouveau:
$ cd path_to_python3.7_folder
Essayez à nouveau d'exécuter jupyter. Ça devrait marcher.
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