问题描述
我尝试使用以下内核规范测量覆盖率,但没有写入任何结果。我想知道为什么会这样。并行标志也不创建任何覆盖结果文件。
请注意,python 的路径实际上是一个绝对路径,我已将其缩短仅用于演示目的。 ~/.local/share/jupyter/kernels/py3_cov/coverage_kernel.json的内容
{
"argv": [
"python","-m","coverage","run","--concurrency=thread","-p","ipykernel_launcher","-f","{connection_file}"
],"display_name": "py3_cov","language": "python"
}
预计在内核中运行的每个代码都会写入覆盖结果文件。如果这个想法是错误的,或者我只是做错了什么,请给我建议。
我知道已经有几个工具可以围绕笔记本执行和覆盖范围(如 nbval、pytest-notebook 等)。我明确提出这个问题,因为我不想为了这个(简单?!)目的而坚持使用另一个工具链。
解决方法
使用 --concurrency=multiprocessing 可以解决问题。但是您需要传递一个 rcfile 来设置子进程的选项。
{
"argv": [
"python","-m","coverage","run","--concurrency=multiprocessing","--rcfile=../setup.cfg"
"-p","ipykernel_launcher","-f","{connection_file}"
],"display_name": "py3_cov","language": "python"
}
现在,当通过 jupyter nbconvert --execute 执行笔记本时,我在输入笔记本文件旁边得到一个覆盖文件:)