如何将基于setuptools的Python包做成可直接调用的命令行工具
实现Python包的终端命令行工具(类似awscli)
1. 编写命令行入口函数
在你的Python包中创建一个处理命令行逻辑的模块(比如cli.py),定义一个作为入口的主函数,示例如下:
# my_package/cli.py def main(): # 这里编写你的命令行逻辑,比如处理参数、执行业务操作 print("我的命令行工具已运行!") if __name__ == "__main__": main()
2. 配置setuptools的入口点
通过配置让setuptools为你的包生成终端可执行命令,分两种配置方式:
方式一:使用setup.py
在setup.py中添加entry_points字段,指定控制台脚本的命令名和对应入口函数:
from setuptools import setup setup( name="my_package", version="0.1.0", packages=["my_package"], entry_points={ "console_scripts": [ "mycmd = my_package.cli:main", # mycmd是你要在终端用的命令 ], }, )
方式二:使用pyproject.toml(推荐)
如果采用现代Python包配置标准,在pyproject.toml中添加脚本配置:
[project.scripts] mycmd = "my_package.cli:main"
3. 重新安装包
用pip安装你的包,开发阶段推荐使用可编辑模式(修改代码后无需重新安装即可生效):
pip install -e .
4. 测试命令
安装完成后,直接在终端输入你配置的命令即可运行:
mycmd
此时终端会执行你在cli.py中定义的main()函数逻辑。
额外优化建议
- 若需处理复杂命令(如多级子命令、参数解析),可以使用
click、typer或argparse库增强命令行交互能力,比如awscli的多级命令体系就基于类似工具实现。 - 确保将依赖库(如click)添加到包的依赖声明中,比如在
setup.py的install_requires或pyproject.toml的dependencies里配置。
内容的提问来源于stack exchange,提问作者manish soni
相关产品推荐
相关产品推荐

