45

我昨晚成功地运行了一个构建。我今天早上起床运行了另一个,没有更改任何配置或修改任何源代码。现在,在运行我的鼻子测试时,我的构建失败并显示“No source for code”消息

NoSource: No source for code: '/home/matthew/.hudson/jobs/myproject/workspace/tests/unit/util.py'
. . . 
No source for code: '/home/matthew/.hudson/jobs/myproject/workspace/__init__.py'

我唯一的线索是它说找不到的文件不存在,但它们从未存在,也不应该存在。例如,在后者中,Hudson 的工作区不是 Python 模块,所以__init__.py不会在那里。

更新:我已经确认这不是哈德逊问题。当我在目录本身中运行覆盖范围的 nostests 时,我看到了类似的消息。同样,coverage 正在寻找的文件从不存在,这使得这非常令人费解。

4

8 回答 8

44

我不确定为什么它认为该文件存在,但您可以告诉coverage.py 通过coverage xml -i开关忽略这些问题。

如果您想追查错误,请给我留言(ned at ned batchelder com)。

于 2010-03-08T12:25:19.170 回答
44

确保那里没有过去可能存在的 .pyc 文件。

于 2010-03-08T16:22:26.897 回答
17

摘要:现有的 .coverage 数据在运行时会保留nosetests --with-coverage,因此请先将其删除。

详细信息:我也刚刚通过 Hudson 和鼻子测试遇到了这个问题。此错误来自coverage/results.py:18(覆盖 3.3.1 - 有 3 个地方引发此错误,但这是相关的)。它试图打开与实际跟踪的模块相对应的 .py 文件。一个小演示:

$ echo print > hello.py
$ echo import hello > main.py
$ coverage run main.py

$ rm hello.py
$ coverage xml
No source for code: '/tmp/aoeu/hello.py'

显然我有一个执行/跟踪的文件 stopwords.pyc,但没有 stopwords.py。然而,在我的代码中,我没有导入停用词,即使删除 .pyc 我仍然得到错误。

一个简单的strings .coverage然后显示对 stopwords.py 的引用仍然存在。nosetests --with-coverage正在使用覆盖率的附加或合并功能,这意味着旧的 .coverage 数据仍然存在。事实上,删除 .coverage 解决了这个问题。

于 2010-06-26T07:57:05.533 回答
10

只需使用“--cover-erase”参数。它修复了这个错误,您不必手动删除覆盖文件

nosetests --with-coverage --cover-erase

我强烈建议您查看帮助以查看您还缺少哪些其他参数,也不要忘记这些插件

于 2012-10-02T15:32:20.033 回答
6

问题是该.pyc文件仍然存在。

一个快速而肮脏的解决方案是删除.pyc该目录中的所有文件:

find . -name "*.pyc" -exec rm -rf {} \;
于 2015-02-14T22:04:40.503 回答
1

我在尝试通过 setuptools 运行鼻子测试覆盖时也遇到了这个问题。如前所述,可以删除现有的 .pyc 文件,但这可能很麻烦。

我最终不得不使用以下内容创建一个 .coveragerc 文件

[报告]

忽略错误=真

修复此错误。

于 2015-05-27T17:10:45.887 回答
0

也许这会有所帮助,但我今天遇到了类似的错误。这是一个权限错误。我的代码正在使用来自另一个用户的结帐(根据设计,向下询问),我需要 sudo 才能使覆盖工作。所以你的问题可能与它有关。

于 2010-07-22T19:05:08.997 回答
0

coverage report -m可以这样调用,无需提供任何参数(参见官方快速说明)。但它适用于第一次脚本覆盖,而不是第二次。例如

coverage run -m f1.py
coverage report -m # works
coverage run -m f2.py
coverage report -m # fails (f2.py instead of f1.py in last coverage run)

相反,始终将脚本指示为 的参数coverage report -m

file="f2.py" && coverage run $file && coverage report -m $file

覆盖报告文档

于 2022-01-02T14:54:35.613 回答