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

如何在Poetry的pyproject.toml中定义可选额外包(Extra)

如何在Poetry的pyproject.toml中定义可选额外包(Extra)

嗨,我正好用Poetry配置过一模一样的需求,这就给你一步步讲明白怎么实现!

第一步:先把基础的包结构配置好

首先,确保你的pyproject.toml里的[tool.poetry]部分能正确识别src目录下的整个my_package(包括core和gui子模块):

[tool.poetry]
name = "my_package"
version = "0.1.0"
description = "核心功能 + 可选GUI扩展"
authors = ["你的名字 <你的邮箱地址>"]
# 告诉Poetry从src目录加载my_package这个包
packages = [{ include = "my_package", from = "src" }]

这里要说明下:默认安装my_package时,整个包的代码(core和gui的所有.py文件)都会被安装到用户环境里,但GUI功能需要的依赖不会装——这正是我们要的,因为GUI是可选功能,没装依赖的话用户用不了,会收到明确的错误提示。

第二步:配置核心功能的默认依赖

在[tool.poetry.dependencies]里写core功能必须的依赖,这些会在用户默认安装时自动装上:

[tool.poetry.dependencies]
python = "^3.8"  # 换成你的项目支持的Python版本
# 这里放core需要的依赖,比如:
# requests = "^2.31.0"
# numpy = "^1.25.0"

第三步:关键!定义GUI的可选Extra组

最后就是你最关心的部分——在pyproject.toml里添加[tool.poetry.extras]区块,把GUI需要的额外依赖都归到gui这个组里:

[tool.poetry.extras]
gui = [
    "PyQt6>=6.5.0",  # 举个例子,GUI需要的UI库
    "matplotlib>=3.7.0"  # 假设GUI需要绘图功能的依赖
]

这样配置完之后:

  • 用户运行poetry add my_package:只会安装my_package的核心代码 + core的依赖,GUI的代码虽然在包里,但因为缺少依赖,无法正常使用;
  • 用户运行poetry add my_package[gui]:会自动安装核心代码 + core依赖 + GUI需要的所有额外依赖,用户就能直接用core和GUI的全部功能了。

补充:如果真的想默认不包含GUI代码(不推荐)

如果你铁了心要让默认安装时完全看不到GUI的代码,其实可以把core和GUI拆成两个独立的子包,但这不符合Python包的常规发布逻辑,会让用户困惑“为什么同一个包名,装了[gui]才会有gui模块”。通常我们还是推荐把所有代码都包含在包里,用extras控制依赖——毕竟用户即使误导入gui模块,也会收到清晰的错误提示,知道需要安装my_package[gui]。

备注:内容来源于stack exchange,提问作者frimann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 18:50:25