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

使用setuptools:如何在pyproject.toml中声明可选脚本与模块?

Python项目可选模块与脚本的配置方案

要实现默认安装仅包含核心模块,且脚本仅在安装[extra]可选依赖时才安装的需求,按以下方式修改pyproject.toml:

1. 区分核心模块与可选模块

明确默认安装的核心模块为src/myproject/modules/下的内容,src/myproject/extra/作为可选模块单独声明:

方式一:手动声明包(推荐,更清晰)

[tool.setuptools.packages]
# 核心包,默认安装
myproject = {path = "src/myproject"}
myproject.modules = {path = "src/myproject/modules"}
# 可选包,仅在安装extra依赖时才会被包含
myproject.extra = {path = "src/myproject/extra", optional = true}

方式二:基于find规则过滤

如果习惯用packages.find批量识别包,可通过排除可选模块+单独声明的方式实现:

[tool.setuptools.packages.find]
where = ["src"]
include = ["myproject*"]
exclude = ["myproject.extra*"]

[tool.setuptools.optional-packages]
myproject.extra = {path = "src/myproject/extra"}

2. 将可选模块绑定到extra依赖组

把可选模块和extra可选依赖组关联,确保安装pip install myproject[extra]时自动包含这些模块:

[project.extras]
extra = ["myproject.extra"]

[project.optional-dependencies]
extra = [
    "tqdm", 
    "antspyx>=0.4.2", 
    "scikit-image", 
    "mpi4py", 
    "scipy"
]

3. 配置可选脚本

让reg和conv脚本仅在安装extra时才被安装到系统路径中,修改脚本声明为带extras参数的形式:

[tool.setuptools.scripts]
reg = {script = "myproject._cmd.reg:main", extras = ["extra"]}
conv = {script = "myproject._cmd.conv:main", extras = ["extra"]}

完整配置示例

整合后的pyproject.toml参考如下:

[project]
name = "myproject"
version = "0.1.0"
dependencies = []  # 填写你的核心依赖

[project.optional-dependencies]
extra = [
    "tqdm", 
    "antspyx>=0.4.2", 
    "scikit-image", 
    "mpi4py", 
    "scipy"
]

[project.extras]
extra = ["myproject.extra"]

[tool.setuptools.packages]
myproject = {path = "src/myproject"}
myproject.modules = {path = "src/myproject/modules"}
myproject.extra = {path = "src/myproject/extra", optional = true}

[tool.setuptools.scripts]
reg = {script = "myproject._cmd.reg:main", extras = ["extra"]}
conv = {script = "myproject._cmd.conv:main", extras = ["extra"]}

验证效果

  • 执行pip install myproject:安装后,myproject.extra模块不存在,reg和conv命令无法调用。
  • 执行pip install myproject[extra]:安装后,myproject.extra模块可用,reg和conv命令正常生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 03:29:56