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

如何为多个Click CLI函数编写setuptools的entry_points参数?

哈哈,这种“曾经写过但突然记不起来”的情况太常见了!我来帮你把两种常见的Click + setuptools配置方式理清楚,不管是多个独立命令还是嵌套命令场景都适用:

场景1:多个独立的Click CLI命令(各自作为单独控制台脚本)

这就是你之前回忆的那种写法——每个Click命令对应一个console_scripts条目,直接指向脚本里的Click函数。

举个例子,假设你的脚本文件是yourscript.py,里面有两个独立的Click命令:

# yourscript.py
import click

@click.command()
def somefunc():
    click.echo("执行 somefunc 命令!")

@click.command()
def morefunc():
    click.echo("执行 morefunc 命令!")

用传统setup.py配置

from setuptools import setup

setup(
    name="your-cli-tool",
    version="0.1.0",
    # 其他必要配置(比如author、description等)
    entry_points={
        "console_scripts": [
            "somefunc=yourscript:somefunc",
            "morefunc=yourscript:morefunc",
        ]
    }
)

用现代pyproject.toml配置(推荐,符合PEP 621标准)

[project]
name = "your-cli-tool"
version = "0.1.0"

[project.scripts]
somefunc = "yourscript:somefunc"
morefunc = "yourscript:morefunc"

安装后,你直接在终端输入somefunc或者morefunc就能运行对应的命令了。

场景2:用Click Group整合嵌套命令(单个入口+多个子命令)

如果是按照Click文档的「嵌套命令」用click.group(),那只需要一个控制台入口,指向你的Group对象,所有子命令都注册到这个Group下。

比如修改yourscript.py为嵌套结构:

# yourscript.py
import click

@click.group()
def cli():
    """这是一个包含多个子命令的CLI工具"""
    pass

@cli.command()
def somefunc():
    click.echo("作为子命令执行 somefunc!")

@cli.command()
def morefunc():
    click.echo("作为子命令执行 morefunc!")

配置entry_points(仅需一个条目)

setup.py写法:

from setuptools import setup

setup(
    name="your-cli-tool",
    version="0.1.0",
    entry_points={
        "console_scripts": [
            "mycli=yourscript:cli",  # mycli是你在终端输入的主命令
        ]
    }
)

pyproject.toml写法:

[project]
name = "your-cli-tool"
version = "0.1.0"

[project.scripts]
mycli = "yourscript:cli"

安装后,你就可以通过mycli somefunc、mycli morefunc来运行子命令,输入mycli --help还能看到所有子命令的说明文档。

小提示

  • 开发阶段可以用pip install -e .以可编辑模式安装,修改代码后无需重新安装就能生效。
  • 如果用pyproject.toml,确保你的setuptools版本≥61.0.0,才能支持PEP 621的配置格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:53:43