如何在uv工作区根目录运行pytest时使用各子包的pyproject.toml配置?
在uv工作区根目录运行pytest时使用各子包独立配置
我正在使用uv工作区,目录结构如下:
albatross ├── packages │ ├── bird-feeder │ │ ├── pyproject.toml │ │ └── src │ │ └── bird_feeder │ │ ├── __init__.py │ │ └── foo.py │ └── seeds │ ├── pyproject.toml │ └── src │ └── seeds │ ├── __init__.py │ └── bar.py ├── pyproject.toml ├── README.md ├── uv.lock └── src └── albatross └── main.py
想知道如何在根目录(albatross目录)运行pytest时,让其使用每个子包各自的pyproject.toml配置?
解决方案
1. 配置根目录pyproject.toml,启用工作包识别并指定测试路径
首先确保根目录的pyproject.toml正确声明工作区成员,让uv识别所有子包:
[workspace] members = [ "packages/*", "src/albatross" ]
接着在根目录的pyproject.toml中添加pytest的测试路径配置,指向各子包的测试目录(若未创建测试目录,先为每个子包建立tests文件夹):
[tool.pytest.ini_options] testpaths = [ "packages/bird-feeder/tests", "packages/seeds/tests", "src/albatross/tests" ]
之后在每个子包的pyproject.toml中编写专属的pytest配置,比如bird-feeder的配置示例:
[tool.pytest.ini_options] pythonpath = ["src"] # 确保pytest能定位到子包源码 addopts = "-xvs" # 自定义pytest运行参数
完成配置后,在根目录执行uv run pytest,pytest会扫描所有指定的测试路径,自动读取对应子包目录下的pyproject.toml配置。
2. 手动指定子包配置文件(临时调试场景)
如果需要临时针对特定子包加载配置,可以在根目录运行命令时,通过--config参数明确指定对应子包的配置文件:
uv run pytest packages/bird-feeder --config=packages/bird-feeder/pyproject.toml packages/seeds --config=packages/seeds/pyproject.toml
这种方式适合单次调试,不适合日常批量运行。
3. 补充:利用子目录的pytest.ini/conftest.py
除了pyproject.toml,pytest会自动识别子目录下的pytest.ini或conftest.py文件。如果子包已有这些文件,pytest扫描到对应目录时会自动加载配置,可作为pyproject.toml配置的补充方案。
内容的提问来源于stack exchange,提问作者Sede
相关产品推荐
相关产品推荐

