jwoglom / signal-curses

Curses-backed terminal interface for Signal using signal-cli
GNU General Public License v3.0
73 stars 9 forks source link

ImportError: No module named gi #16

Open aparcar opened 5 years ago

aparcar commented 5 years ago

I'm getting the following error when trying to run the CLI

a@reboot:~/src/signal-curses$ make install
Makefile:8: java installed
Makefile:18: signal-cli installed
Makefile:27: libunixsocket-java installed
Makefile:35: python-gobject installed
Makefile:43: pkg-config installed
Makefile:47: installing pipenv
pipenv install
Installing dependencies from Pipfile.lock (568cf4)…
  🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 7/7 — 00:00:00
To activate this project's virtualenv, run the following:
 $ pipenv shell
a@reboot:~/src/signal-curses$ pipenv shell
Spawning environment shell (/bin/bash). Use 'exit' to leave.
a@reboot:~/src/signal-curses$ . /home/a/.local/share/virtualenvs/signal-curses-MYuYIKoq/bin/activate
(signal-curses-MYuYIKoq) a@reboot:~/src/signal-curses$ python3 main.py 
Traceback (most recent call last):
  File "main.py", line 19, in <module>
    import scurses
  File "/home/a/src/signal-curses/scurses/__init__.py", line 25, in <module>
    import pydbus
  File "/home/a/.local/share/virtualenvs/signal-curses-MYuYIKoq/lib/python3.7/site-packages/pydbus/__init__.py", line 1, in <module>
    from .bus import SystemBus, SessionBus, connect
  File "/home/a/.local/share/virtualenvs/signal-curses-MYuYIKoq/lib/python3.7/site-packages/pydbus/bus.py", line 1, in <module>
    from gi.repository import Gio
  File "/home/a/.local/share/virtualenvs/signal-curses-MYuYIKoq/lib/python3.7/site-packages/vext/gatekeeper/__init__.py", line 204, in load_module
    raise ImportError("No module named %s" % modulename)
ImportError: No module named gi
(signal-curses-MYuYIKoq) a@reboot:~/src/signal-curses$ 
jwoglom commented 5 years ago

Hi, this is an issue relating to vext which allows for the Gtk3 gi dependency to be accessed inside the virtualenv. My guess is you're missing some dependency for gi, make sure that you have all of the dependencies specified in the Makefile installed:

sudo apt-get install python-gobject libgirepository1.0-dev libglib2.0-dev libcairo2-dev libffi-dev python3-gi
RaghavRao commented 4 years ago

you can also do:

pip install vext
pip install vext.gi
elsehow commented 4 years ago

@aparcar Did you ever resolve this issue? I'm experiencing the same thing. (The above suggestions haven't worked for me).

elsehow commented 4 years ago

Nevermind, I was able to resolve this problem by running

pipenv shell
pip uninstall vext
pip uninstall vext.gi
pip install vext
pip install vext.gi

Not sure why this worked, but hope it helps someone else.

keraba commented 3 years ago

I'm seeing this too, after trying everything mentioned above. This is buster on crostini.

keraba@penguin ~/signal-curses> dpkg -l | egrep python-gobject|libgirepo|libglib2|libcairo2|libffi-dev|python3-gi|libunixs ii libcairo2:arm64 1.16.0-4 arm64 Cairo 2D vector graphics library ii libcairo2-dev:arm64 1.16.0-4 arm64 Development files for the Cairo 2D graphics library ii libffi-dev:arm64 3.2.1-9 arm64 Foreign Function Interface library (development files) ii libgirepository-1.0-1:arm64 1.58.3-2 arm64 Library for handling GObject introspection data (runtime library) ii libgirepository1.0-dev:arm64 1.58.3-2 arm64 Library for handling GObject introspection data (development files) ii libglib2.0-0:arm64 2.58.3-2+deb10u2 arm64 GLib library of C routines ii libglib2.0-bin 2.58.3-2+deb10u2 arm64 Programs for the GLib library ii libglib2.0-data 2.58.3-2+deb10u2 all Common files for GLib library ii libglib2.0-dev:arm64 2.58.3-2+deb10u2 arm64 Development files for the GLib library ii libglib2.0-dev-bin 2.58.3-2+deb10u2 arm64 Development utilities for the GLib library ii libunixsocket-java 0.8.1-1 arm64 Unix socket API and bindings for Java ii python-gobject 3.30.4-1 all Python 2.x bindings for GObject - transitional package ii python-gobject-2 2.28.6-13+b1 arm64 deprecated static Python bindings for the GObject library ii python3-gi 3.30.4-1 arm64 Python 3 bindings for gobject-introspection libraries keraba@penguin ~/signal-curses> pipenv --rm No virtualenv has been created for this project yet! Aborted! keraba@penguin ~/signal-curses> make install Makefile:8: java installed Makefile:18: signal-cli installed Makefile:27: libunixsocket-java installed Makefile:35: python-gobject installed Makefile:43: pkg-config installed Makefile:47: installing pipenv pipenv install Creating a virtualenv for this project... Pipfile: /home/keraba/signal-curses/Pipfile Using /usr/bin/python3 (3.7.3) to create virtualenv... ⠸ Creating virtual environment...created virtual environment CPython3.7.3.final.0-64 in 544ms creator CPython3Posix(dest=/home/keraba/.local/share/virtualenvs/signal-curses-q0GP4Ph5, clear=False, no_vcs_ignore=False, global=False) seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/keraba/.local/share/virtualenv) added seed packages: pip==20.3.3, setuptools==51.1.2, wheel==0.36.2 activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator

✔ Successfully created virtual environment! Virtualenv location: /home/keraba/.local/share/virtualenvs/signal-curses-q0GP4Ph5 Installing dependencies from Pipfile.lock (568cf4)... An error occurred while installing vext.gi==0.7.0 --hash=sha256:ec9fab2e736b4466c08460c063ea362782e9a0f63544faa9d5681308dc74bb3d! Will try again. 🐍 ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 7/7 — 00:00:48 Installing initially failed dependencies... ☤ ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/0 — 00:00:00 To activate this project's virtualenv, run pipenv shell. Alternatively, run a command inside the virtualenv with pipenv run. keraba@penguin ~/signal-curses> pipenv shell Launching subshell in virtual environment... keraba@penguin ~/signal-curses> . /home/keraba/.local/share/virtualenvs/signal-curses-q0GP4Ph5/bin/activate (signal-curses) keraba@penguin ~/signal-curses> python3 main.py Traceback (most recent call last): File "main.py", line 19, in import scurses File "/home/keraba/signal-curses/scurses/init.py", line 25, in import pydbus File "/home/keraba/.local/share/virtualenvs/signal-curses-q0GP4Ph5/lib/python3.7/site-packages/pydbus/init.py", line 1, in from .bus import SystemBus, SessionBus, connect File "/home/keraba/.local/share/virtualenvs/signal-curses-q0GP4Ph5/lib/python3.7/site-packages/pydbus/bus.py", line 1, in from gi.repository import Gio File "/home/keraba/.local/share/virtualenvs/signal-curses-q0GP4Ph5/lib/python3.7/site-packages/vext/gatekeeper/init.py", line 204, in load_module raise ImportError("No module named %s" % modulename) ImportError: No module named gi (signal-curses) keraba@penguin ~/signal-curses> pip uninstall vext.gi Found existing installation: vext.gi 0.7.4 Uninstalling vext.gi-0.7.4: Would remove: /home/keraba/.local/share/virtualenvs/signal-curses-q0GP4Ph5/lib/python3.7/site-packages/vext.gi-0.7.4.dist-info/* /home/keraba/.local/share/virtualenvs/signal-curses-q0GP4Ph5/share/vext/specs/gi.vext Proceed (y/n)? y Successfully uninstalled vext.gi-0.7.4 (signal-curses) keraba@penguin ~/signal-curses> pip install vext Collecting vext Using cached vext-0.7.4-cp37-none-any.whl Requirement already satisfied: ruamel.yaml>=0.11.10 in /home/keraba/.local/share/virtualenvs/signal-curses-q0GP4Ph5/lib/python3.7/site-packages (from vext) (0.16.0) Requirement already satisfied: ruamel.yaml.clib in /home/keraba/.local/share/virtualenvs/signal-curses-q0GP4Ph5/lib/python3.7/site-packages (from ruamel.yaml>=0.11.10->vext) (0.1.0) Installing collected packages: vext Successfully installed vext-0.7.4 (signal-curses) keraba@penguin ~/signal-curses> pip install vext.gi Collecting vext.gi Using cached vext.gi-0.7.4-py3-none-any.whl Requirement already satisfied: vext>=0.7.4 in /home/keraba/.local/share/virtualenvs/signal-curses-q0GP4Ph5/lib/python3.7/site-packages (from vext.gi) (0.7.4) Requirement already satisfied: ruamel.yaml>=0.11.10 in /home/keraba/.local/share/virtualenvs/signal-curses-q0GP4Ph5/lib/python3.7/site-packages (from vext>=0.7.4->vext.gi) (0.16.0) Requirement already satisfied: ruamel.yaml.clib in /home/keraba/.local/share/virtualenvs/signal-curses-q0GP4Ph5/lib/python3.7/site-packages (from ruamel.yaml>=0.11.10->vext>=0.7.4->vext.gi) (0.1.0) Installing collected packages: vext.gi Successfully installed vext.gi-0.7.4 (signal-curses) keraba@penguin ~/signal-curses> python3 main.py Traceback (most recent call last): File "main.py", line 19, in import scurses File "/home/keraba/signal-curses/scurses/init.py", line 25, in import pydbus File "/home/keraba/.local/share/virtualenvs/signal-curses-q0GP4Ph5/lib/python3.7/site-packages/pydbus/init.py", line 1, in from .bus import SystemBus, SessionBus, connect File "/home/keraba/.local/share/virtualenvs/signal-curses-q0GP4Ph5/lib/python3.7/site-packages/pydbus/bus.py", line 1, in from gi.repository import Gio ModuleNotFoundError: No module named 'gi'

Based on the other comments, it seems like this 'vext' is a weak link. Maybe this could be changed to not rely on its implicit behavior?

keraba commented 3 years ago

It appears that pipenv is not needed. I simply:

pip3 install npyscreen pip3 install PyQRCode python3 main.py -u ...

and it works fine. So I'm wondering why the instructions steer users towards pipenv.