Ubuntu 20.04 升级后,Python 缺少 libffi.so.6
我最近把我的操作系统升级到了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 个回答
我也遇到同样的问题
- 升级到了Ubuntu 20
- pip不再工作了(出现同样的错误)
我做了以下操作:
- 删除了我正在使用的虚拟环境
- 重新创建了一个新的虚拟环境
当然,我没法用pip freeze
来保存我的依赖项(因为pip不工作),但幸运的是,我对这些依赖项并不在意。
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
我在使用 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.6
和 libffi.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。
如果你在用pyenv的话,你只需要卸载你正在使用的Python版本,然后再重新安装就可以了。
举个例子:
pyenv uninstall 3.7.4
pyenv install 3.7.4
从我的角度来看,这样做比直接改动系统库要干净和安全。
看起来我解决了这个问题。虽然我可能错了,但我觉得事情是这样的:
- Ubuntu 20.04把libffi6升级到了libffi7
- 而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会导致很多依赖项也被删除。