I recently stumbled upon some issue with running coverage measurements within virtual environment. I do not remember similar issues in the past, nor I was able to find solution on the web.
Basically, when I am trying to run test suite in virtualenv, it works fine. But as soon, as I try to do it using coverage
, it fails because of lack of modules it requires. Based on some answer on StackOverflow I checked my script and found out that coverage
uses different interpreter, even if running from inside the same virtualenv
.
Here is how to reproduce it:
$ virtualenv --no-site-packages venv
New python executable in venv/bin/python
Installing Setuptools................................................done.
Installing Pip.......................................................done.
$ source venv/bin/activate
(venv)$ echo 'import sys; print(sys.executable)' > test.py
(venv)$ python test.py
/home/tadeck/testground/venv/bin/python
(venv)$ coverage run test.py
/usr/bin/python
The question is: how to make coverage
work with virtual environment seamlessly? I could alter sys.path
or install required modules system-wide, but there has to be a cleaner way.
pip install coverage
in your new venv
[alex@gesa ~]$ virtualenv venv
[alex@gesa ~]$ source venv/bin/activate
(venv)[alex@gesa ~]$ pip install coverage
(venv)[alex@gesa ~]$ echo 'import sys; print(sys.executable)' > test.py
(venv)[alex@gesa ~]$ python test.py
/home/alex/venv/bin/python
(venv)[alex@gesa ~]$ coverage run test.py
/home/alex/venv/bin/python
(venv)[alex@gesa ~]$
I had to leave my virtualenv after installing coverage and reactivate it to get coverage to work.
[alex@gesa ~]$ virtualenv --no-site-packages venv
[alex@gesa ~]$ source venv/bin/activate
(venv)[alex@gesa ~]$ pip install coverage
(venv)[alex@gesa ~]$ deactivate
[alex@gesa ~]$ source venv/bin/activate
来源:https://stackoverflow.com/questions/18959072/running-coverage-inside-virtualenv