我最近偶然发现了在虚拟环境中运行覆盖率测量的一些问题。我不记得过去的类似问题,也无法在网上找到解决方案。
基本上,当我尝试在virtualenv中运行测试套件时,它运行正常。但是很快,当我尝试使用coverage
时,它失败了,因为它需要缺少模块。根据StackOverflow上的一些答案,我检查了我的脚本,发现coverage
使用不同的解释器,即使从同一virtualenv
内部运行。
以下是如何重现它:
$ 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
问题是:如何使coverage
无缝地与虚拟环境协同工作?我可以改变sys.path
或在系统范围内安装所需的模块,但必须有一种更清洁的方式。
答案 0 :(得分:16)
我必须在安装覆盖后离开我的virtualenv并重新激活它以使覆盖工作。
[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
答案 1 :(得分:11)
pip install coverage
[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 ~]$