Coverage.py中的“没有代码源”消息

时间:2010-03-05 13:21:20

标签: python continuous-integration code-coverage nosetests

昨晚我成功地跑了一个版本。我今天早上起床并运行另一个而不更改任何配置或修改任何源代码。现在,当使用 coverage 运行 nosetests 时,我的构建失败并显示消息“没有代码来源”

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不会存在。

更新:我已经确认这不是Hudson问题。当我在目录本身运行带有覆盖的nostests时,我看到类似的消息。再一次,覆盖范围正在寻找的文件从来没有开始,这使得这非常令人费解。

7 个答案:

答案 0 :(得分:39)

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

答案 1 :(得分:31)

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

如果你想追查错误,请给我写一行(ned batedlder com)。

答案 2 :(得分:15)

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

详细信息:我也是通过Hudson和nosetests遇到过这个问题。此错误来自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数据仍然存在。确实,删除.coverage解决了这个问题。

答案 3 :(得分:9)

只需使用'--cover-erase'参数即可。它修复了此错误,您无需手动删除覆盖文件

nosetests --with-coverage --cover-erase

我强烈建议查看帮助,看看你还缺少哪些其他args,不要忘记那些插件

答案 4 :(得分:6)

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

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

find . -name "*.pyc" -exec rm -rf {} \;

答案 5 :(得分:1)

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

我最终不得不使用以下

创建.coveragerc文件
  

[报告]

     

ignore_errors = True

修复此错误。

答案 6 :(得分:0)

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