coverage.misc.NoSource:没有代码来源:'/usr/src/server/rep-1>'

coverage.misc.NoSource: No source for code: '/usr/src/server/rep-1>'

我使用 coverage 包已经有一段时间了,直到昨天它都运行良好,我相信它只是在生成报告的级别上失败了。更奇怪的是,功能没有变化。

我有以下 coveragerc 文件:

[run]
source = .
branch = True
concurrency = multiprocessing
omit =
    manage.py
    config/asgi.py
    config/wsgi.py
    config/settings.py
    */migrations/*
    *test*

[report]
show_missing = True
skip_covered = True

和Django manage.py文件如下:

import os
import sys


COVERAGE_ACCCEPTANCE = 85


def main():
    argv = sys.argv
    try:
        command = argv[1]
    except IndexError:
        command = "help"
    default_settings = "config.settings"
    running_tests = (command == "test")
    if running_tests:
        default_settings = "config.settings_test"
        from coverage import Coverage
        cov = Coverage()
        cov.erase()
        cov.start()
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", default_settings)
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?",
        ) from exc
    execute_from_command_line(argv)
    if running_tests:
        cov.stop()
        cov.save()
        cov.combine()
        if round(cov.report()) < COVERAGE_ACCCEPTANCE:
            sys.exit(1)
        cov.erase()


if __name__ == "__main__":
    main()

测试 运行 成功后,覆盖率引发以下错误:

Ran 317 tests in 96.790s
OK
Destroying test database for alias 'default'...
Traceback (most recent call last):
File "./serverX/manage.py", line 44, in <module>
    main()
File "./serverX/manage.py", line 38, in main
    if round(cov.report()) < COVERAGE_ACCCEPTANCE:
File "/usr/local/lib/python3.8/site-packages/coverage/control.py", line 913, in report
    return reporter.report(morfs, outfile=file)
File "/usr/local/lib/python3.8/site-packages/coverage/summary.py", line 45, in report
    for fr, analysis in get_analysis_to_report(self.coverage, morfs):
File "/usr/local/lib/python3.8/site-packages/coverage/report.py", line 70, in get_analysis_to_report
    analysis = coverage._analyze(fr)
File "/usr/local/lib/python3.8/site-packages/coverage/control.py", line 808, in _analyze
    return Analysis(data, it, self._file_mapper)
File "/usr/local/lib/python3.8/site-packages/coverage/results.py", line 20, in __init__
    self.statements = self.file_reporter.lines()
File "/usr/local/lib/python3.8/site-packages/coverage/python.py", line 191, in lines
    return self.parser.statements
File "/usr/local/lib/python3.8/site-packages/coverage/python.py", line 182, in parser
    self._parser = PythonParser(
File "/usr/local/lib/python3.8/site-packages/coverage/parser.py", line 44, in __init__
    self.text = get_python_source(self.filename)
File "/usr/local/lib/python3.8/site-packages/coverage/python.py", line 61, in get_python_source
    raise NoSource(exc_msg)
coverage.misc.NoSource: No source for code: '/usr/src/server/rep-1>'.
Aborting report output, consider using -i.
1
Cleaning up project directory and file based variables 00:01
ERROR: Job failed: exit code 1

我认为它所说的文件未找到 (/usr/src/server/rep-1) 可能是生成的报告,因为我的存储库中没有任何此类文件。我真的很感激任何见解,因为这有点奇怪,我在 GitHub/Whosebug 上的文档或包问题中找不到任何与此实例类似的内容。

我 运行正在使用 Django 3.1,在 GitLab 管道上的覆盖率为 5.5。

我发现根本原因是今天发布了 attrs==21.3.0 库。如果我使用 21.2.0 版本,那么 coverage report 不会因为缺少表示文件而失败。

https://github.com/pytest-dev/pytest/discussions/9459