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

Mat*_*ris 33 python continuous-integration code-coverage nosetests

我成功地昨晚跑了一个版本.我今天早上起床并运行另一个而不更改任何配置或修改任何源代码.现在我的构建与失败的消息"没有源代码"运行时我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'
Run Code Online (Sandbox Code Playgroud)

我唯一的线索是,它说它找不到的文件不存在,但它们从来没有,它们不应该是.例如,在后者中,Hudson的工作区不是Python模块,因此__init__.py不会存在.

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

Ros*_*oss 40

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

  • 在我的情况下,这正是帮助 - 删除所有*.pyc以及.coverage和所有存在的xml文件. (2认同)
  • 太棒了!这应该是公认的答案:) (2认同)

Ned*_*der 34

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

如果你想追踪错误,请给我一行(ned batedlder com).

  • 在我的例子中,我有文件`__init __.py`,导入后创建了文件`__init __.pyc`.然后我删除了`__init __.py`,但忘记了`.pyc`,所以`coverage.py`被混淆了.删除`__init __.pyc`后,一切正常. (3认同)

Yan*_*ang 15

摘要:运行时会保留现有的.coverage数据nosetests --with-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'
Run Code Online (Sandbox Code Playgroud)

显然我有一个文件stopwords.pyc被执行/跟踪,但没有stopwords.py.然而在我的代码中没有任何地方导入停用词,甚至删除.pyc我仍然得到错误.

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

  • 很高兴看到你到底了.BTW:您可以使用`coverage debug data`代替`strings .coverage`,它将为您提供`.coverage`文件中数据的摘要. (2认同)

Ada*_*nce 9

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

nosetests --with-coverage --cover-erase
Run Code Online (Sandbox Code Playgroud)

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


Ric*_* II 6

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

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

find . -name "*.pyc" -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud)

  • 捷径:`找到.-name"*.pyc"-delete` (2认同)