After updating from Ubuntu 20.04 to Ubuntu 20.10 I am not able to run PyGObject applications on a Python Virtual Environment.
I can reproduce the issue following these simple steps:
sudo apt-get install python3-venv
python3 -m venv venv
source env/bin/activate
pip install PyGObject==3.38.0
python3 hw.py
Where hw.py
is the standard 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()
When I try to run it, it throws this error:
$ 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
Running hw.py
on the System Environment works correctly (the issue only happens when using the Virtual Environment).
A workaround is to find and provide a copy of libffi.so.7
in /usr/lib/x86_64-linux-gnu/
but, since this library version is not available inside the official repositories of Ubuntu 20.10, this is a difficult and unsafe operation.
I had a similar issue with libffi.so.6 but this was for 20.04, check my solution here https://stackoverflow.com/a/63329830/6881647
You can try the same thing on 20.10 by downloading the package from here https://mirrors.edge.kernel.org/ubuntu/pool/main/libf/libffi/libffi7_3.3-4_amd64.deb and installing it. This will put the 2 files (
libffi.so.7
andlibffi.so.7.1.0
) inside of/usr/lib/x86_64-linux-gnu/
and it shouldn't overwrite anything.Can you explain why you consider this to be difficult and unsafe? It's a simple deb install and as far as the unsafe part goes the package is provided by Ubuntu mirrors, not some third party or something.