basedpyright 如何解析 tests 目录中的测试工具导入?
数据阿明
结论
不必把测试辅助模块移到 src。对于 from tests.utility.helpers import some_helper,basedpyright 的导入搜索路径需要包含顶层包 tests 的父目录,也就是项目根目录。当前配置中的 extraPaths: ["tests"] 指向 tests 目录本身。按这种导入写法,解析器会在该目录下继续查找 tests,路径层级可能因此对不上。
调整配置
如果 pyrightconfig.json 位于 project-root,可以把 tests 执行环境中的 extraPaths 改为项目根目录:
{
"pythonVersion": "3.10",
"reportAny": "none",
"executionEnvironments": [
{
"root": "src"
},
{
"root": "tests",
"reportUninitializedInstanceVariable": "none",
"reportMissingModuleSource": "none",
"extraPaths": ["."]
}
]
}
root 用来为匹配的文件选择执行环境,extraPaths 用来补充模块搜索路径。这里的 "." 是相对于配置文件所在目录的项目根目录,解析器因此能从根目录找到 tests/utility/helpers.py。如果配置文件不在项目根目录,extraPaths 应指向实际包含 tests 目录的位置。
为什么 unittest 能运行
unittest 能运行,说明测试运行时的 Python 导入路径可以找到该模块。测试的启动方式、当前工作目录或其他运行配置都可能影响运行时的搜索路径。静态分析器则根据自己的项目配置解析导入,不会因为测试运行成功就自动使用相同的路径。
是否需要把辅助模块移到 src
不需要,测试专用的辅助代码可以留在 tests 中。对于 tests.utility.helpers 这种完整包名,静态分析器的搜索路径需要包含 tests 的父目录。调整后如果仍无法解析,请确认 tests 和 tests/utility 中的 __init__.py 与给出的结构一致,并检查 pyrightconfig.json 是否位于假定的项目根目录。
备注:内容仅供参考。
