PyGObject、venv 和 Ubuntu 20.10:导入错误:libffi.so.7:无法打开共享对象文件:没有这样的文件或目录

Rob*_*rdi 2 libraries gobject python3 20.10

从 Ubuntu 20.04 更新到 Ubuntu 20.10 后,我无法在 Python 虚拟环境上运行 PyGObject 应用程序。

我可以按照以下简单步骤重现该问题:

sudo apt-get install python3-venv
python3 -m venv venv
source env/bin/activate
pip install PyGObject==3.38.0
python3 hw.py
Run Code Online (Sandbox Code Playgroud)

hw.py标准的 PyGObject Hello World 在哪里:

#!/usr/bin/env python3

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

window = Gtk.Window(title="Hello World")
window.show()
window.connect("destroy", Gtk.main_quit)
Gtk.main()
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它时,它会抛出以下错误:

$ python3 hw.py 
Traceback (most recent call last):
  File "hw.py", line 3, in <module>
    import gi
  File "/home/leinardi/temp/hw/venv/lib/python3.8/site-packages/gi/__init__.py", line 40, in <module>
    from . import _gi
ImportError: libffi.so.7: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

hw.py在系统环境上运行正常(仅在使用虚拟环境时才会出现此问题)。

解决方法是查找并提供libffi.so.7in的副本/usr/lib/x86_64-linux-gnu/,但是,由于该库版本在 Ubuntu 20.10 的官方存储库中不可用,因此这是一个困难且不安全的操作。

小智 6

我对 libffi.so.6 也有类似的问题,但这是 20.04 的问题,请在此处检查我的解决方案/sf/answers/4433088131/

您可以在 20.10 上尝试同样的操作,方法是从此处下载软件包 https://mirrors.edge.kernel.org/ubuntu/pool/main/libf/libffi/libffi7_3.3-4_amd64.deb并安装它。这会将 2 个文件 (libffi.so.7libffi.so.7.1.0) 放入其中/usr/lib/x86_64-linux-gnu/,并且不会覆盖任何内容。

您能解释一下为什么您认为这很困难且不安全吗?这是一个简单的 deb 安装,就不安全部分而言,该软件包是由 Ubuntu 镜像提供的,而不是某些第三方或其他东西。