昨晚我成功地跑了一个版本。我今天早上起床并运行另一个而不更改任何配置或修改任何源代码。现在,当使用 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时,我看到类似的消息。再一次,覆盖范围正在寻找的文件从来没有开始,这使得这非常令人费解。
答案 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才能使覆盖工作。所以你的问题可能有些问题。