如何通过单个pyproject.toml同时兼容Poetry与UV的开发依赖配置?
如何通过单个pyproject.toml同时兼容Poetry与UV的开发依赖配置?
我之前也碰到过一模一样的问题,目前最实用的解决方案就是在同一个pyproject.toml里同时维护两套开发依赖的配置区块——虽然看起来有点重复,但能让两个工具都乖乖识别到开发依赖:
给UV用的
[dependency-groups]区块:[dependency-groups] dev = [ "bandit ~= 1.8.3", ... ]这样UV执行
uv install --group dev时,就能正确读取并安装开发依赖。给Poetry用的
[tool.poetry.group.dev.dependencies]区块:[tool.poetry.group.dev.dependencies] bandit = "^1.8.3" ...这是Poetry的标准开发依赖写法,能确保
poetry lock和poetry install把开发依赖包含到lockfile和安装流程里。
不过手动维护两套配置容易出错,这里分享个小技巧——用TOML的锚点和引用功能减少重复工作量:
# 先统一存一份开发依赖的版本定义 [tool.shared-dev-deps] bandit = "~=1.8.3" # 其他开发依赖也都集中放这里... # UV 依赖组引用共享配置 [dependency-groups] dev = [ { version = tool.shared-dev-deps.bandit }, # 其他依赖同理引用即可 ] # Poetry 开发依赖引用共享配置 [tool.poetry.group.dev.dependencies] bandit = tool.shared-dev-deps.bandit # 其他依赖同理引用即可
这样你只需要在[tool.shared-dev-deps]里修改依赖版本,两边的配置会自动同步,不用手动改两次,能省不少麻烦。
目前因为Poetry对PEP 621的开发依赖规范支持还没完全跟上,UV又是严格遵循PEP相关标准,所以暂时只能用这种双配置的方式过渡。等后续工具更新后,说不定就能统一成一套配置了。
备注:内容来源于stack exchange,提问作者Ken Williams
相关产品推荐
相关产品推荐

