如何用pyproject.toml和setuptools实现cool包的可选安装?
实现可选安装子包的配置方案
项目结构
pyproject.toml src/ cool/ __init__.py ... cool_cli/ __init__.py ...
需求
支持两种安装方式:
pip install cool # 仅安装cool核心包 pip install cool[cli] # 同时安装cool和cool_cli包及对应依赖
当前配置问题
你现有的pyproject.toml会默认把cool和cool_cli全部安装,无法区分两种安装场景,需要调整配置实现按需安装。
解决方案
修改pyproject.toml,通过setuptools的额外配置关联可选包与依赖,具体配置如下:
[project] name = "cool" requires-python = ">=3.11" version = "0.0.1" readme = "readme.md" dependencies = [ "httpx" ] [project.optional-dependencies] cli = [ "click" ] [tool.setuptools] # 指定包的根目录为src,适配你的项目布局 package-dir = {"": "src"} # 默认仅安装cool核心包 packages = ["cool"] include-package-data = true # 绑定cli额外依赖与cool_cli包 [tool.setuptools.extras] cli = ["cool_cli"]
配置说明
package-dir = {"": "src"}:告知setuptools从src目录下查找包,这是src布局项目的必要配置。- 默认
packages = ["cool"]:确保执行pip install cool时仅安装核心包。 [tool.setuptools.extras]:将cool_cli包与cli额外依赖绑定,用户执行pip install cool[cli]时,会自动安装cool_cli包以及click依赖。
内容的提问来源于stack exchange,提问作者zzz
相关产品推荐
相关产品推荐

