在virtualenv内运行覆盖

Tad*_*eck 15 python virtualenv coverage.py python-coverage

我最近偶然发现了在虚拟环境中运行覆盖率测量的一些问题.我不记得过去的类似问题,也无法在网上找到解决方案.

基本上,当我尝试在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
Run Code Online (Sandbox Code Playgroud)

问题是:如何coverage无缝地使用虚拟环境?我可以在sys.path系统范围内更改或安装所需的模块,但必须采用更清洁的方式.

小智 17

我必须在安装覆盖后离开我的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
Run Code Online (Sandbox Code Playgroud)

  • 不知道为什么你有这个问题,这正是造成我问题的原因.全方位投票. (4认同)

Tri*_*m21 11

pip install coverage 在你的新的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 ~]$
Run Code Online (Sandbox Code Playgroud)