如何用Poetry实现:安装mypackage全量依赖、mypackage[core]仅装核心依赖?
实现默认全量依赖、[core]标签安装核心依赖的Poetry配置
要实现你需要的反向extras效果(默认装全量,[core]装最小核心),可以通过Poetry的default-extras配置和嵌套extras组来实现,具体步骤如下:
1. 配置pyproject.toml
将核心依赖和额外依赖拆分为两个extras组,同时设置默认安装全量依赖组:
[tool.poetry] name = "mypackage" version = "0.1.0" description = "你的包描述" authors = ["你的名字 <你的邮箱>"] readme = "README.md" default-extras = ["full"] # 关键:默认安装full组的依赖 [tool.poetry.dependencies] python = "^3.8" # 根据你的包支持的Python版本调整 [tool.poetry.extras] # 核心依赖组:仅包含运行基础API必需的轻量依赖 core = [ "requests>=2.25.1", "pydantic>=1.8.2" ] # 全量依赖组:包含核心依赖+体积大/构建耗时的额外依赖 full = [ "mypackage[core]", # 嵌套依赖core组,避免重复写核心依赖 "tensorflow>=2.8.0", # 示例:体积庞大的依赖 "pyspark>=3.2.0", # 示例:小众/构建耗时的依赖 "scikit-learn>=1.0.2" ]
配置说明
default-extras = ["full"]:指定用户执行pip install mypackage时,自动安装full组的所有依赖(核心+额外)。core组:仅包含运行包核心API必需的最小依赖。full组:通过mypackage[core]嵌套依赖核心组,再添加那些可选的重依赖。
2. 验证安装效果
- 安装全量依赖:执行
pip install mypackage,会自动安装core+full组的所有依赖。 - 安装核心依赖:执行
pip install mypackage[core],仅安装core组的轻量依赖,跳过额外的重依赖。
3. 代码中处理依赖缺失
为了给用户更好的体验,在需要额外依赖的API中添加导入检查,提示用户安装全量版本:
# mypackage/heavy_feature.py try: import tensorflow as tf except ImportError: raise RuntimeError( "该功能需要TensorFlow依赖,请执行 `pip install mypackage` 或 `pip install mypackage[full]` 安装全量依赖" ) def heavy_processing(): # 使用TensorFlow的代码 pass
注意事项
- 确保你的Poetry版本≥1.2.0,
default-extras是Poetry 1.2.0及以上版本才支持的特性。 - 发布前可以用
poetry build生成包文件,然后用pip install dist/mypackage-0.1.0.tar.gz测试安装效果。
内容的提问来源于stack exchange,提问作者link89
相关产品推荐
相关产品推荐

