如何为多个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
相关产品推荐
相关产品推荐

