Python 零基础教程:从零开始构建你的首个命令行界面(CLI)应用!
终端?CLI?它们到底有啥用?🤔
朋友们,你们有没有这样的经历——在电视剧里看到黑客们敲着密密麻麻的代码,屏幕上疯狂滚动着指令,看起来就像是掌控世界的样子?😎 其实,那些神秘的窗口,就是 命令行终端,而他们运行的,就是CLI(Command Line Interface,命令行界面)应用!
CLI 应用的本质,就是一个可以在终端里运行的程序,你可以用它来执行各种任务,比如管理文件、运行服务器、查询天气,甚至写个计算器来帮你算账!今天,花姐就来手把手教你,用 Python 写一个简单但超实用的 CLI 计算器,让你轻松踏入 CLI 世界的大门!🚀
一、CLI 应用的基本组成部分
要理解 CLI 应用,我们得搞清楚几个关键概念:
命令(Command):就是你在终端里敲的指令,比如 git
、ls
、python
这些都是命令。
子命令(Subcommand):有些命令可以带不同的子命令,比如 git commit
中的 commit
,就是 git
这个命令的一个子命令。
参数(Arguments):用户输入的额外信息,比如 git commit -m "提交说明"
里的 "提交说明"
就是参数。
选项(Options/Flags):用来调整命令行为,比如 -m
是 git commit
的一个选项。
今天,我们就来创建一个 Python CLI 计算器,它会支持四种运算:加、减、乘、除,并且可以通过命令行参数来指定计算内容!📊
二、项目结构:该怎么组织文件?📁
在开始写代码之前,我们先确定项目结构,这样代码更清晰,后期维护也更方便。
cli_calculator/
├── cli_calculator/
│ ├── calculator.py # 计算器核心逻辑
│ ├── __init__.py # 让 Python 把这个文件夹当作模块
│ └── __main__.py # CLI 入口文件
├── README.md # 项目介绍
├── requirements.txt # 依赖库
└── setup.py # 打包和安装配置
其中:
calculator.py
:计算器的核心逻辑(加、减、乘、除)。__main__.py
:处理用户输入,解析命令行参数,调用 calculator.py
里的函数。requirements.txt
:列出项目依赖,让别人可以轻松安装你的 CLI 工具。setup.py
:让 CLI 应用支持 pip install
,这样你就能随时随地运行它!三、编写计算器逻辑(calculator.py)📖
首先,我们要写一个 Calculator
类,封装加减乘除的逻辑。
📌 代码如下:
class Calculator:
"""一个简单的 CLI 计算器"""
def add(self, a, b):
"""加法运算"""
return a + b
def sub(self, a, b):
"""减法运算"""
return a - b
def mul(self, a, b):
"""乘法运算"""
return a * b
def div(self, a, b):
"""除法运算(注意不能除以 0)"""
if b == 0:
raise ValueError("错误:除数不能为 0!")
return a / b
📌 代码解释:
Calculator
类定义了 add()
、sub()
、mul()
和 div()
方法,分别处理加、减、乘、除运算。div()
方法里加了一个错误检查,如果用户输入 0 作为除数,会抛出 ValueError
,防止程序崩溃。四、用 argparse 解析命令行参数(main.py)🖥
现在,我们来编写 CLI 的核心部分,使用 argparse 模块解析命令行参数。
📌 代码如下:
import argparse
from cli_calculator.calculator import Calculator
def main():
"""CLI 主入口"""
calculator = Calculator()
# 创建 ArgumentParser 对象
parser = argparse.ArgumentParser(prog="计算器",description="简单的 CLI 计算器", epilog="示例用法:cli_calculator add 1 2")
# 创建子命令解析器
subparsers = parser.add_subparsers(title="操作符", dest="operator",required=True)
# 添加子命令(加、减、乘、除)
for op in ["add", "sub", "mul", "div"]:
sub_parser = subparsers.add_parser(op, help=f"{op} 两个数")
sub_parser.add_argument("a", type=float, help="第一个数")
sub_parser.add_argument("b", type=float, help="第二个数")
sub_parser.add_argument("-p","--precision", type=int, default=2, help="保留的小数位数")
# 解析参数
args = parser.parse_args()
print(args)
# 执行对应运算
if args.operator:
try:
operation = getattr(calculator, args.operator)
result = round(operation(args.a, args.b), args.precision)
print(f"计算结果 :{result}")
except ValueError as e:
print(f"错误:{e}")
else:
parser.print_help()
if __name__ == "__main__":
main()
📌 代码解释:
argparse.ArgumentParser()
:创建命令行解析器,并定义 CLI 的描述信息。parser.add_subparsers()
:创建子命令解析器,用于解析 add
、sub
、mul
、div
这些操作符。getattr(calculator, args.operator)
:动态调用 Calculator
类中的方法(比如 add()
)。round(result, args.precision)
:计算结果四舍五入,控制小数位数。五、安装和运行 CLI 工具
📌 1. 创建 requirements.txt
(列出项目依赖):
setuptools
📌 2. 创建 setup.py
(让 CLI 工具可安装):
from setuptools import setup
setup(
name="cli_calculator",
version="1.0",
packages=["cli_calculator"],
entry_points={
"console_scripts": ["cli_calculator = cli_calculator.__main__:main"],
},
description="一个简单的 Python CLI 计算器",
author="花姐",
python_requires=">=3.6",
)
name=“cli_calculator”:指定你的包的名字是 cli_calculator
。这个名字在 Python 包管理平台(比如 PyPI)中是唯一的,用户通过这个名字来安装包。
version=“1.0”:指定包的版本号是 1.0
,你可以根据包的更新更改版本号。
packages=[“cli_calculator”]:这里列出了包含在包中的所有 Python 包。cli_calculator
是该包的主模块,它是一个文件夹,其中包含了实现代码。
entry_points:这个字段定义了一个或多个控制台脚本,这样用户可以通过命令行使用你的程序。具体来说:
"console_scripts": ["cli_calculator = cli_calculator.__main__:main"]
表示当用户在命令行中输入 cli_calculator
时,会调用 cli_calculator/__main__.py
文件中的 main()
函数。description=“一个简单的 Python CLI 计算器”:这是包的简短描述,会在 PyPI 上显示,帮助用户理解这个包的功能。
author=“花姐”:指定包的作者名字。这里的作者是“花姐”,就是我啦!
python_requires=“>=3.6”:这个字段指定了包的 Python 版本要求。表示该包要求 Python 版本为 3.6 或更高版本。
📌 3. 安装 CLI 工具:
pip install -e .
💡 解释:
pip install -e .
这个命令的 -e
代表 editable mode(可编辑模式),意思是我们安装的是当前项目的源码版本,而不是一个打包好的固定版本。pip install -e .
-e的后面跟了一个点千万被忘记。.
在 Unix 和 Windows 命令行中表示当前目录。所以
pip install -e .
的意思是:在当前目录下查找 setup.py
文件,然后安装这个 Python 包。📌 什么时候去掉 -e
?🤔
pip install -e .
适用于开发阶段,但如果你的项目已经完成,或者你想要安装一个稳定的、独立的版本,那就该去掉 -e
了,直接使用:
pip install .
这样,pip
会把你的包复制到 site-packages
目录,不会再链接到源码目录,即使修改代码,安装的版本也不会自动更新。
📌 pip install -e .
和 pip install .
的区别
命令 | 用途 |
---|---|
pip install -e . |
开发阶段:以“可编辑模式”安装,修改源码会立即生效。 |
pip install . |
发布/部署阶段:安装一个固定版本,修改源码不会影响已安装的包。 |
📌 4. 运行 CLI 计算器:
cli_calculator add 6 9
cli_calculator div 6 9 -p 5
六、总结:你学到了什么?🎯
✅ 了解了 CLI 应用的基本概念。
✅ 掌握了 argparse
,让 Python 脚本支持命令行参数。
✅ 用 Python 实现了一个 CLI 计算器,支持加减乘除运算。
✅ 学会了如何打包 CLI 应用,让它支持 pip install
!
💡 现在,你可以尝试扩展这个 CLI 计算器,比如增加 sqrt
(开方)、power
(幂运算)等新功能!你就是命令行世界的新晋黑客了!😎
作者:花小姐的春天