【问题标题】:Running coverage inside virtualenv在 virtualenv 中运行覆盖
【发布时间】:2013-09-28 08:07:55
【问题描述】:

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

基本上,当我尝试在 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 或在系统范围内安装所需的模块,但必须有更简洁的方法。

【问题讨论】:

  • 恐怕无法在 Windows 上重现此内容。覆盖工作正常。 + 1 帮助有需要的pythonista :)
  • 您是否尝试在您正在创建的 virtualenv 中安装 coverage 包?
  • @Bogdan:它已经在那里了,所以我没有尝试(重新)安装它。但是当我执行pip install -U coverage 时,我得到“Requirement already up-to-date: coverage in ./venv/lib/python2.7/site-packages”。

标签: python virtualenv coverage.py python-coverage


【解决方案1】:

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 ~]$

【讨论】:

  • 您的解决方案有帮助 - 我在 virtualenv 中重新安装了 coverage。它已安装,但不知何故命令被覆盖,并且指向错误的位置。现在它可以正常工作了。谢谢!
  • 这对我也有用。我认为在全球范围内安装覆盖范围就足够了,但它不断抛出与我的虚拟环境中安装的软件包相关的导入错误,即使我在运行覆盖范围时激活了虚拟环境......似乎覆盖范围应该支持这种(常见)使用案例。
【解决方案2】:

我必须在安装 Coverage 后离开我的 virtualenv 并重新激活它才能让 Coverage 工作。

[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

【讨论】:

  • 对不起,这不是答案,这是给 virtualenv 维护者的错误报告。
  • 不知道你为什么对此投了反对票,这正是导致我的问题的原因。到处点赞。
  • @Tritium21 这是一个答案,今天仍然有效 - 刚刚在 Python 3 中解决了我的问题
  • @jamespo 4 年前我还不清楚...这不是对所提问题的回答。
猜你喜欢
  • 2020-04-15
  • 1970-01-01
  • 1970-01-01
  • 2014-06-26
  • 2015-08-11
  • 2018-02-03
  • 1970-01-01
  • 1970-01-01
  • 2017-12-11
相关资源
最近更新 更多