如何分离Python包的运行时依赖与开发依赖?解决YATL工具PyPI安装时强制安装开发库的问题
搞定YATL的依赖膨胀问题(Poetry配置指南)
看起来你已经用Poetry的依赖分组功能找对了方向,只是之前的命令语法出了问题,咱们一步步来解决:
1. 先确认你的配置没问题
你的pyproject.toml分组配置是完全正确的:
- 顶层
dependencies是工具运行必须的核心依赖,默认会被安装 dev组是开发时用的检查、测试工具,examples组是示例代码的依赖,这两个组的依赖不会被默认安装
所以配置文件不用改,问题出在执行的命令上。
2. 修复你之前的错误命令
你写的rm -rf poetry.lock poetry install --without dev,examples把两个命令混在一起了,系统会把poetry install...当成rm的参数,肯定失效。正确的做法是分开执行或者用&&连接:
清理旧锁文件(可选但推荐,避免缓存干扰)+ 仅安装核心依赖:
rm -rf poetry.lock && poetry install --without dev,examples
这条命令执行后,只会安装requests、jinja2这些核心依赖,dev组的pytest、ruff等都不会被安装,完美符合普通用户的需求。
3. 普通用户通过PyPI安装的自动隔离
放心,当你把包发布到PyPI后,用户用pip install yatl-testing安装时,Poetry会自动只把顶层dependencies里的核心依赖打包进去,dev和examples组的依赖根本不会出现在PyPI的包元数据里——这是Poetry发布包的默认行为,完全不用你额外操心。
4. 开发者的一键全依赖安装
其他贡献者克隆仓库后,只需要一条命令就能装全所有开发相关的依赖:
# 安装核心+dev+examples依赖 poetry install --with dev,examples # 如果不需要示例依赖,只装核心+dev poetry install --with dev
要是想更便捷,还可以在pyproject.toml里加个自定义脚本:
[tool.poetry.scripts] setup-dev = "poetry install --with dev,examples"
之后开发者只需要跑poetry run setup-dev就能一键搞定所有依赖安装。
5. 验证你的依赖环境
安装完成后,用poetry show命令可以查看当前环境的依赖列表:
- 不带参数:只显示核心依赖
- 加
--with dev:显示核心+dev依赖
这样就能快速确认分组是否生效了。
内容的提问来源于stack exchange,提问作者khabib73
相关产品推荐
相关产品推荐

