使用 Python 和 Typer 构建命令行待办事项应用程序

举报
Yuchuan 发表于 2021/11/19 09:01:26 2021/11/19
【摘要】 当您正在学习一种新的编程语言或试图将您的技能提升到一个新的水平时,构建一个应用程序来管理您的待办事项列表可能是一个有趣的项目。在本教程中,您将使用 Python 和Typer为命令行构建一个功能性待办事项应用程序,这是一个相对年轻的库,几乎可以立即创建强大的命令行界面 (CLI) 应用程序。

目录

当您正在学习一种新的编程语言或试图将您的技能提升到一个新的水平时,构建一个应用程序来管理您的待办事项列表可能是一个有趣的项目。在本教程中,您将使用 Python 和Typer为命令行构建一个功能性待办事项应用程序,这是一个相对年轻的库,几乎可以立即创建强大的命令行界面 (CLI) 应用程序。

通过这样的项目,您将应用广泛的核心编程技能,同时构建具有真实功能和需求的真实应用程序。

在本教程中,您将学习如何:

  • 使用Python 中的Typer CLI构建功能性待办事项应用程序
  • 使用 Typer 向您的待办事项应用程序添加命令参数选项
  • 使用 TyperCliRunnerpytest测试您的 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或您选择的平台,并开始从用户那里获得反馈。

要在您的待办事项应用程序中提供所有这些功能,您需要完成一些任务:

  1. 构建能够接受和处理命令、选项和参数的命令行界面
  2. 选择合适的数据类型来表示您的待办事项
  3. 实现一种持久存储待办事项列表的方法
  4. 定义用户界面与待办事项数据连接的方法

这些任务与所谓的模型-视图-控制器设计密切相关,这是一种架构模式。在这种模式中,模型处理数据,视图处理用户界面,控制器连接两端使应用程序工作。

在您的应用程序和项目中使用此模式的主要原因是提供关注点分离 (SoC),使代码的不同部分独立处理特定概念。

您需要做出的下一个决定是关于您将用于处理您进一步定义的每个任务的工具和库。换句话说,您需要决定您的软件堆栈。在本教程中,您将使用以下堆栈:

  • 用于构建待办事项应用程序 CLI 的Typer
  • 命名元组字典来处理待办事项数据
  • json用于管理持久数据存储的Python模块

您还将使用configparserPython标准库中的模块来处理配置文件中应用程序的初始设置。在配置文件中,您将在文件系统中存储待办事项数据库的路径。最后,您将使用pytest作为测试 CLI 应用程序的工具。


先决条件

要完成本教程并充分利用它,您应该熟悉以下主题:

就是这样!如果您已准备好动手并开始创建待办事项应用程序,那么您可以从设置工作环境和项目布局开始。


第 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__.pyrptodo/目录中打开文件。然后在其中添加以下代码:

"""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 应用程序

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。