使用python制作CLI基础_0

本文最后更新于:2025年2月5日 下午

主要学习使用python制作CLI两个主要方面的内容:

  1. 利用toml文件打包python项目 (本篇内容)
  2. python中的命令行参数解析

 

一、项目结构

mypackage
├── pyproject.toml 
|   # README.rst or README.md 
|   # LICENCE
└── mypackage
    ├── __init__.py
    ├── main.py (假设其中的main函数为入口函数,即为命令行使用时调用的函数)
    └── ... (other Python files)

以上是大致的python项目结构,结构并非固定,包含基础文件即可

toml 文件为安装打包所需的配置文件

README 文件主要描述该工具的基本信息等,供使用者与后续开发者阅读

 

二、流程简述

  1. 创建一个python虚拟环境
  2. 编写py文件实现预期的逻辑功能
  3. 编写toml文件,记录依赖和入口函数等(后续介绍)
  4. 编写说明文档
  5. 运行 pip install -e .

将上 -e 不需要每次修改代码后重新安装,如果是确定最终版本也可以去掉,其全称为 --editable

至此是本地安装为CLI的全部内容

以下是需要分发或上传的额外步骤

  1. 使用 pip 安装 build pip install --upgrade build

  2. 运行 python -m build

运行该指令后将会生成一个 dist 文件夹并在其中生成 tar.gz.whl 文件,可用于上传分发


整个流程适用于所有符合 PEP 517PEP 660 标准的构建后端,无论你toml文件中指定是 setuptools 还是 hatch 只要配置正确均可执行

 

三、编写toml文件

# 项目元数据
[project]
name = "my_project"  # 项目名称
version = "0.1.0"    # 项目版本
description = "A simple Python project"  # 项目描述
authors = [
    { name = "Your Name", email = "your.email@example.com" },  # 作者信息
]
license = { file = "LICENSE" }  # 许可证文件
readme = "README.md"  # 项目说明文件
requires-python = ">=3.8"  # 支持的 Python 版本
classifiers = [  # PyPI 分类标签
    "Development Status :: 3 - Alpha",
    "Intended Audience :: Developers",
    "License :: OSI Approved :: MIT License",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.8",
    "Programming Language :: Python :: 3.9",
    "Programming Language :: Python :: 3.10",
]

# 项目依赖
dependencies = [  # 项目运行时依赖
    "requests>=2.25.0",
    "numpy>=1.20.0",
]

# 可选依赖(额外功能)
[project.optional-dependencies]
dev = [  # 开发环境依赖
    "pytest>=6.0.0",
    "black>=21.0",
]
docs = [  # 文档生成依赖
    "sphinx>=4.0.0",
    "sphinx-rtd-theme>=0.5.0",
]

# 项目脚本(命令行工具)
[project.scripts]
my-cli = "mypackage.main:main"  # 命令行工具入口点

# 构建系统配置
[build-system]
requires = ["setuptools>=61.0", "wheel"]  # 构建依赖
build-backend = "setuptools.build_meta"  # 构建后端

以上是一个toml文件的 基础 结构,当然还有许多其他的标签并未提及,例如你也可以在其中利用[tool.pytest.ini_options] 配置 pytest 的相关信息

 

不同的构建后端还可以支持更加丰富的内容,例如 hatch 可以使用 hatch new “myproject” 命令初始化项目结构并自动生成toml文件部分内容

最后获得的 tar.gz.whl 文件可以使用 pip install **.tar.gz/**.whl 安装也可以用 twine 上传至 pypi