You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何分离Python包的运行时依赖与开发依赖?解决YATL工具PyPI安装依赖冗余问题

解决Poetry依赖分组与安装问题

看起来你遇到的核心问题是Poetry依赖分组的配置生效异常,以及需要区分用户和开发者的依赖安装逻辑。下面我会一步步帮你解决:

1. 先确保Poetry版本支持分组功能

Poetry的group依赖管理是在1.2.0版本才引入的,如果你的Poetry版本低于这个版本,[tool.poetry.group.dev.dependencies]这类配置会被直接忽略,dev依赖会被当作全局依赖强制安装。

先升级Poetry到最新版本:

poetry self update

2. 验证你的pyproject.toml配置(已经是正确的)

你的配置完全符合Poetry分组依赖的规范:

  • 根节点的dependencies是用户运行YATL必须的核心依赖
  • [tool.poetry.group.dev.dependencies]是开发阶段专用的工具(代码检查、测试、格式化)
  • [tool.poetry.group.examples.dependencies]是示例代码的依赖

这个结构本身没问题,不需要修改。

3. 修复开发者/测试安装命令

你之前的命令没生效,大概率是版本问题,升级后可以用以下命令实现不同场景的安装:

  • 开发者一键安装所有依赖(核心+dev+examples):
    poetry install
    
  • 仅安装核心依赖(模拟用户pip安装的效果):
    # 方法1:排除dev和examples组
    poetry install --without dev,examples
    # 方法2:仅安装main组(Poetry 1.4+支持,更直观)
    poetry install --only main
    
  • 仅安装核心+dev依赖(不需要示例依赖时):
    poetry install --with dev
    

4. 确保用户通过pip安装时仅获取核心依赖

当你用poetry publish把包推送到PyPI时,Poetry默认只会把根节点的dependencies打包进发布的包中,dev和examples组的依赖不会被包含。

你可以提前验证这个行为:

  1. 用poetry build生成本地包(会在dist目录下生成.tar.gz和.whl文件)
  2. 创建一个干净的虚拟环境,安装本地包:
    pip install dist/yatl-testing-xxx.tar.gz
    
  3. 执行pip list查看安装的依赖,只会看到你根节点配置的requests、jinja2、pyyaml、lxml,不会出现dev依赖。

额外建议

  • 在项目README里明确写出开发者的安装步骤,比如:

    开发者快速上手:

    git clone https://your-repo-url.git
    cd yatl
    poetry install  # 一键安装所有开发依赖
    
  • 如果你的工具提供命令行入口,可以在pyproject.toml中添加scripts配置,比如:
    [tool.poetry.scripts]
    yatl = "yatl.main:cli"
    
    这样用户安装后可以直接用yatl命令启动工具。

内容的提问来源于stack exchange,提问作者khabib73

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 10:47:33