使用 Python 和 Typer 构建命令行待办事项应用程序
目录
当您正在学习一种新的编程语言或试图将您的技能提升到一个新的水平时,构建一个应用程序来管理您的待办事项列表可能是一个有趣的项目。在本教程中,您将使用 Python 和Typer为命令行构建一个功能性待办事项应用程序,这是一个相对年轻的库,几乎可以立即创建强大的命令行界面 (CLI) 应用程序。
通过这样的项目,您将应用广泛的核心编程技能,同时构建具有真实功能和需求的真实应用程序。
在本教程中,您将学习如何:
- 使用Python 中的Typer CLI构建功能性待办事项应用程序
- 使用 Typer 向您的待办事项应用程序添加命令、参数和选项
- 使用 Typer
CliRunner
和pytest测试您的 Python 待办事项应用程序
此外,您还练习与加工技能JSON文件使用Python的json
模块和管理配置文件与Python的configparser
模块。了解这些知识后,您就可以立即开始创建 CLI 应用程序了。
您可以通过单击下面的链接并转到source_code_final/
目录来下载此待办事项 CLI 应用程序的整个代码和所有其他资源:
演示
在这个循序渐进的项目中,您将构建一个命令行界面 (CLI)应用程序来管理待办事项列表。您的应用程序将提供基于 Typer 的 CLI,这是一个用于创建 CLI 应用程序的现代多功能库。
在开始之前,请查看此演示,了解在完成本教程后您的待办事项应用程序的外观和工作方式。演示的第一部分展示了如何获得使用应用程序的帮助。它还展示了如何初始化和配置应用程序。视频的其余部分演示了如何与基本功能交互,例如添加、删除和列出待办事项:
好的!该应用程序具有用户友好的 CLI,允许您设置待办事项数据库。在那里,您可以使用适当的命令、参数和选项添加、删除和完成待办事项。如果您遇到困难,那么您可以使用--help
带有适当参数的选项寻求帮助。
你想开始这个待办应用项目吗?凉爽的!在下一部分中,您将计划如何构建项目的布局以及将使用哪些工具来构建它。
项目概况
当您想要启动一个新应用程序时,您通常首先考虑您希望该应用程序如何工作。在本教程中,您将为命令行构建一个待办事项应用程序。您将调用该应用程序rptodo
。
您希望您的应用程序具有用户友好的命令行界面,允许您的用户与应用程序交互并管理他们的待办事项列表。
首先,您希望 CLI 提供以下全局选项:
-v
或--version
显示当前版本并退出应用程序。--help
显示整个应用程序的全局帮助消息。
您将在许多其他 CLI 应用程序中看到这些相同的选项。提供它们是个好主意,因为大多数使用命令行的用户都希望在每个应用程序中都能找到它们。
关于管理待办事项列表,您的应用程序将提供用于初始化应用程序、添加和删除待办事项以及管理待办事项完成状态的命令:
命令 | 描述 |
---|---|
init |
初始化应用程序的待办事项数据库 |
add DESCRIPTION |
将新的待办事项添加到数据库中并带有说明 |
list |
列出数据库中的所有待办事项 |
complete TODO_ID |
通过使用其 ID 将待办事项设置为已完成来完成待办事项 |
remove TODO_ID |
使用其 ID 从数据库中删除待办事项 |
clear |
通过清除数据库删除所有待办事项 |
这些命令提供了将待办事项应用程序转变为最小可行产品 (MVP)所需的所有功能,以便您可以将其发布到 PyPI或您选择的平台,并开始从用户那里获得反馈。
要在您的待办事项应用程序中提供所有这些功能,您需要完成一些任务:
- 构建能够接受和处理命令、选项和参数的命令行界面
- 选择合适的数据类型来表示您的待办事项
- 实现一种持久存储待办事项列表的方法
- 定义将用户界面与待办事项数据连接的方法
这些任务与所谓的模型-视图-控制器设计密切相关,这是一种架构模式。在这种模式中,模型处理数据,视图处理用户界面,控制器连接两端使应用程序工作。
在您的应用程序和项目中使用此模式的主要原因是提供关注点分离 (SoC),使代码的不同部分独立处理特定概念。
您需要做出的下一个决定是关于您将用于处理您进一步定义的每个任务的工具和库。换句话说,您需要决定您的软件堆栈。在本教程中,您将使用以下堆栈:
您还将使用configparser
Python标准库中的模块来处理配置文件中应用程序的初始设置。在配置文件中,您将在文件系统中存储待办事项数据库的路径。最后,您将使用pytest作为测试 CLI 应用程序的工具。
先决条件
要完成本教程并充分利用它,您应该熟悉以下主题:
- 模型-视图-控制器模式
- 命令行界面 (CLI)
- Python 类型提示,也称为类型注释
- 使用 pytest 进行单元测试
- Python中的面向对象编程
- 配置文件
configparser
- 带有 Python 的 JSON 文件
json
- 文件系统路径操作
pathlib
就是这样!如果您已准备好动手并开始创建待办事项应用程序,那么您可以从设置工作环境和项目布局开始。
第 1 步:设置待办事项项目
要开始编写待办事项应用程序,您需要设置一个工作 Python 环境,其中包含您将在此过程中使用的所有工具、库和依赖项。然后你需要给项目一个连贯的 Python应用程序布局。这就是您将在以下小节中执行的操作。
要下载您将在本节中创建的所有文件和项目结构,请单击下面的链接并转到source_code_step_1/
目录:
设置工作环境
在本节中,您将创建一个Python 虚拟环境来处理您的待办事项项目。为每个独立项目使用虚拟环境是 Python 编程的最佳实践。它允许您隔离项目的依赖项,而不会弄乱您的系统 Python 安装或破坏使用相同工具和库的不同版本的其他项目。
注意:本项目使用Python 3.9.5构建和测试,代码应适用于大于或等于 3.6 的 Python 版本。
要创建 Python 虚拟环境,请移至您喜欢的工作目录并创建一个名为rptodo_project/
. 然后启动终端或命令行并运行以下命令:
$ cd rptodo_project/
$ python -m venv ./venv
$ source venv/bin/activate
(venv) $
在这里,您首先rptodo_project/
使用cd
. 该目录将是您项目的根目录。然后使用venv
标准库创建一个 Python 虚拟环境。to 的参数venv
是托管虚拟环境的目录的路径。通常的做法是调用该目录venv
,.venv
或者env
,根据自己的喜好。
第三个命令激活您刚刚创建的虚拟环境。您知道环境处于活动状态,因为您的提示更改为类似(venv) $
.
注意:要在 Windows 上创建和激活虚拟环境,您将遵循类似的过程。
继续并运行以下命令:
c:\> python -m venv venv
c:\> venv\Scripts\activate.bat
如果您在不同的平台上,那么您可能需要查看有关创建虚拟环境的 Python 官方文档。
现在您有了一个工作的虚拟环境,您需要安装 Typer来创建 CLI 应用程序和pytest来测试应用程序的代码。要安装 Typer 及其所有当前可选依赖项,请运行以下命令:
(venv) $ python -m pip install typer==0.3.2 colorama==0.4.4 shellingham==1.4.0
此命令安装 Typer 及其所有推荐的依赖项,例如Colorama,以确保颜色在您的命令行窗口中正常工作。
要安装 pytest(稍后您将使用它来测试待办事项应用程序),请运行以下命令:
(venv) $ python -m pip install pytest==6.2.4
使用最后一条命令,您成功安装了开始开发待办事项应用程序所需的所有工具。您将使用的其余库和工具是 Python 标准库的一部分,因此您无需安装任何东西即可使用它们。
定义项目布局
完成待办应用项目设置的最后一步是创建将构成应用程序布局的包、模块和文件。应用程序的核心包将rptodo/
位于rptodo_project/
.
下面是对包内容的描述:
文件 | 描述 |
---|---|
__init__.py |
可以rptodo/ 成为一个 Python 包 |
__main__.py |
提供入口点脚本以使用python -m rptodo 命令从包中运行应用程序 |
cli.py |
为应用程序提供 Typer 命令行界面 |
config.py |
包含处理应用程序配置文件的代码 |
database.py |
包含处理应用程序待办事项数据库的代码 |
rptodo.py |
提供将 CLI 与待办事项数据库连接的代码 |
您还需要一个tests/
包含__init__.py
文件的目录来将目录转换为包,以及一个test_rptodo.py
文件来保存应用程序的单元测试。
继续并使用以下结构创建项目的布局:
rptodo_project/
│
├── rptodo/
│ ├── __init__.py
│ ├── __main__.py
│ ├── cli.py
│ ├── config.py
│ ├── database.py
│ └── rptodo.py
│
├── tests/
│ ├── __init__.py
│ └── test_rptodo.py
│
├── README.md
└── requirements.txt
该README.md
文件将提供项目的描述以及安装和运行应用程序的说明。向README.md
您的项目添加描述性和详细的文件是编程的最佳实践,尤其是当您计划将项目作为开源发布时。
该requirements.txt
文件将为您的待办事项应用程序提供依赖项列表。继续填写以下内容:
typer==0.3.2
colorama==0.4.4
shellingham==1.4.0
pytest==6.2.4
现在您的用户可以通过运行以下命令自动安装列出的依赖项:
(venv) $ python -m pip install -r requirements.txt
提供这样的一个requirements.txt
可确保您的用户将安装您用于构建项目的依赖项的确切版本,从而避免意外问题和行为。
除了requirements.txt
,此时您的所有项目文件都应该是空的。在本教程中,您将使用必要的内容填充每个文件。在下一节中,您将使用 Python 和 Typer 对应用程序的 CLI 进行编码。
第 2 步:使用 Python 和 Typer 设置 To-Do CLI 应用程序
此时,您的待办事项应用程序应该有一个完整的项目布局。您还应该有一个可运行的 Python 虚拟环境,其中包含所有必需的工具和库。在此步骤结束时,您将拥有一个功能强大的 Typer CLI 应用程序。然后,您将能够在其最小功能的基础上进行构建。
您可以通过单击下面的链接并转到source_code_step_2/
目录来下载将在此部分中添加的代码、单元测试和资源:
启动您的代码编辑器并__init__.py
从rptodo/
目录中打开文件。然后在其中添加以下代码:
"""Top-level package for RP To-Do."""
# rptodo/__init__.py
__app_name__ = "rptodo"
__version__ = "0.1.0"
(
SUCCESS,
DIR_ERROR,
FILE_ERROR,
DB_READ_ERROR,
DB_WRITE_ERROR,
JSON_ERROR,
ID_ERROR,
) = range(7)
ERRORS = {
DIR_ERROR: "config directory error",
FILE_ERROR: "config file error",
DB_READ_ERROR: "database read error",
DB_WRITE_ERROR: "database write error",
ID_ERROR: "to-do id error",
}
在这里,您首先定义两个模块级名称来保存应用程序的名称和版本。然后,你定义一系列的返回值和错误代码和整型的号码给他们使用range()
。ERROR
是一个将错误代码映射到人类可读的错误消息的字典。您将使用这些消息告诉用户应用程序发生了什么。
有了这些代码,您就可以创建 Typer CLI 应用程序的框架了。这就是您将在下一节中执行的操作。
创建 Typer CLI 应用程序
- 点赞
- 收藏
- 关注作者
评论(0)