4

I am trying to run the dogtail examples in a virtualenv. My virtualenv currently looks like this:

$ pip freeze
dogtail==0.9.9
ruamel.yaml==0.15.35
vext==0.7.0
vext.gi==0.6.8

But when I try to run an example, I get an error message that pyatspi is missing:

$ python appstartup.py  
Traceback (most recent call last):
  File "appstartup.py", line 9, in <module>
    from dogtail.procedural import *
  File "/home/username/.local/share/virtualenvs/nmtest/lib/python3.6/site-packages/dogtail/procedural.py", line 5, in <module>
    from dogtail import rawinput
  File "/home/username/.local/share/virtualenvs/nmtest/lib/python3.6/site-packages/dogtail/rawinput.py", line 6, in <module>
    from pyatspi import Registry as registry
  File "/home/username/.local/share/virtualenvs/nmtest/lib/python3.6/site-packages/vext/gatekeeper/__init__.py", line 204, in load_module
    raise ImportError("No module named %s" % modulename)
ImportError: No module named pyatspi

I already have the python3-pyatspi package installed, but it obviously isn't accessible from within my virtualenv. "pyatspi" doesn't appear on PyPI, but I have found source code. How can I install pyatspi in my virtualenv?

steveax
  • 17,527
  • 6
  • 44
  • 59
lofidevops
  • 15,528
  • 14
  • 79
  • 119

1 Answers1

4

Since your package is not available on PyPI, you need to create you're virtualenv with the system packages (that includes your installed pyatspi):

$ virtualenv --system-site-packages foo
$ source foo/bin/activate

Another option is to include the pyatspi package "exclusively"

$ virtualenv --no-site-packages foo
$ source foo/bin/activate
$ ln -s /usr/lib/python3/dist-packages/pyatspi* $VIRTUAL_ENV/lib/python*/site-packages

The commands/paths might be slightly different depending on your environment. In order to find out the path to the pyatspi lib - start up the python shell (without an activated virtualenv), import the module and check module_name.path. e.g.

Python 3.6.4+ (default, Feb 12 2018, 08:25:03) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyatspi
>>> pyatspi.__path__
['/usr/lib/python3/dist-packages/pyatspi']
lofidevops
  • 15,528
  • 14
  • 79
  • 119
Tom
  • 1,105
  • 8
  • 17
  • Great answer! If using the python `venv` module rather than `virtualenv` one can also do `python -m venv --system-site-packages foo` – maratbn Apr 01 '23 at 03:28