You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python多进程代码在site-packages下覆盖率统计异常求助

问题原因及解决方案

核心原因

  1. coverage默认追踪范围限制:当库被安装到site-packages后,属于Python全局已安装包,coverage.py默认不会自动追踪这类包的代码(默认仅追踪项目根目录下的代码);而同级目录下的代码属于项目本地代码,会被默认纳入追踪范围。
  2. 多进程覆盖率继承失效:multiprocessing.Pool启动的子进程无法自动继承主进程的coverage追踪配置,尤其是代码在site-packages时,子进程环境未加载coverage的追踪钩子,导致子进程执行的f函数代码未被统计。

解决方案

  • 显式指定追踪包:
    在pytest命令中明确指定要覆盖的包名(假设你的库名为sample_lib),执行:

    pytest --cov=sample_lib tests/
    

    或者在pytest.ini中配置:

    [pytest]
    cov = sample_lib
    

    让coverage明确追踪site-packages中的目标库代码。

  • 启用跨进程覆盖率支持:
    使用coverage的并行模式处理多进程场景,步骤如下:

    # 以并行模式运行测试
    coverage run --parallel-mode -m pytest tests/
    # 合并多进程生成的覆盖率数据
    coverage combine
    # 生成覆盖率报告
    coverage report
    

    也可在pytest.ini中开启覆盖率追加:

    [pytest]
    cov_append = True
    
  • 采用可编辑安装方式:
    开发阶段测试时,用可编辑模式将库安装到site-packages,代码仍指向本地源码目录,覆盖率追踪逻辑和同级目录一致:

    pip install -e .
    
  • 强制包含site-packages中的库代码:
    创建.coveragerc配置文件,添加规则强制覆盖site-packages中的目标库:

    [run]
    include =
        */site-packages/sample_lib/*
    

内容的提问来源于stack exchange,提问作者Sébastien Eskenazi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 03:04:54