Ubuntu 20.04 升级后,Python 缺少 libffi.so.6

112 投票
9 回答
119274 浏览
提问于 2025-06-18 03:58

我最近把我的操作系统升级到了Ubuntu 20.04 LTS。

现在当我在Python中尝试导入像Numpy这样的库时,出现了以下错误:

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

我试着安装libffi这个软件包,但apt找不到它:

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

相关问题:

  • 暂无相关问题
暂无标签

9 个回答

5

我也遇到同样的问题

  1. 升级到了Ubuntu 20
  2. pip不再工作了(出现同样的错误)

我做了以下操作:

  1. 删除了我正在使用的虚拟环境
  2. 重新创建了一个新的虚拟环境

当然,我没法用pip freeze来保存我的依赖项(因为pip不工作),但幸运的是,我对这些依赖项并不在意。

28

Ubuntu 20系统里安装的是libffi7这个版本。如果你想用之前的版本,可以从Ubuntu 19.10(代号Eoan Ermine)来安装。你可以从这里下载,或者你也可以按照下面的命令来操作。

$ 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
84

我在使用 Xubuntu 20.04 的时候,重新编译 Python 3.7 没有成功。

我解决这个问题的方法是从这里下载 19.10 版本的包:

https://mirrors.kernel.org/ubuntu/pool/main/libf/libffi/libffi6_3.2.1-8_amd64.deb

然后安装它。

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

这会把 libffi.so.6libffi.so.6.0.4 这两个文件解压到 /usr/lib/x86_64-linux-gnu/ 目录下。其实 libffi.so.6 只是指向同一目录下的 libffi.so.6.0.4 的一个链接。

根据我看到的,这个操作不会覆盖任何文件,所以应该是安全的。

Ubuntu 22.04 额外步骤

根据下面 pijing 的评论,安装完上面的包后,你需要运行这个命令:

apt install libffi-dev

然后重新编译 Python。

101

如果你在用pyenv的话,你只需要卸载你正在使用的Python版本,然后再重新安装就可以了。

举个例子:

pyenv uninstall 3.7.4
pyenv install 3.7.4

从我的角度来看,这样做比直接改动系统库要干净和安全。

109

看起来我解决了这个问题。虽然我可能错了,但我觉得事情是这样的:

  1. Ubuntu 20.04把libffi6升级到了libffi7
  2. 而Python仍然在找libffi6

我解决这个问题的方法是:

在你的系统中找到 libffi.so.7

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

然后创建一个叫 libffi.so.6 的链接,指向 libffi.so.7

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

更新:

很多用户提到,这个解决办法可能会有意想不到的后果。更好的方法是按照@amichaud的建议重新安装Python。如果你没有使用pyenv/virtualenv等工具,最好把这个方法作为最后的手段,因为删除Python会导致很多依赖项也被删除。

撰写回答