使用uv构建并发布一个完整的Python CLI应用
概述
从一个空目录开始,使用 uv
创建、开发、构建并发布一个名为 ccyy-demo
的命令行调用的工具
初始化项目
uv
提供了uv init
命令,可以快速生成一个遵循最佳实践的项目骨架。使用--package
参数可以直接创建标准的src
布局。
1.基于已有项目进行初始化
# 创建并进入项目根目录
mkdir ccyy-demo
cd ccyy-demo
# 在当前项目下初始化并生成标准目录结构
# 会自动创建虚拟环境 (.venv)、pyproject.toml, 以及src/ccyy_demo/__init__.py源代码结构
uv init . --package
2.使用uv创建并初始化项目
uv init --package ccyy_demo
# 需单独创建venv环境
uv venv
现在,你的目录结构应该是这样的:
ccyy-demo/
├── .venv/
├── pyproject.toml
├── .python-version
├── .gitignore
├── README.md
└── src/
└── ccyy_demo/
├── __init__.py
编写应用代码
创建 src/ccyy_demo/main.py
文件,写入命令行调用工具
的代码核心逻辑。将使用 argparse
来处理命令行参数。
import argparse
def main():
"""CLI 工具的主入口函数"""
parser = argparse.ArgumentParser(
description="一个由 ccyy-demo 创建的、使用 uv 构建的简单 CLI 工具。"
)
parser.add_argument(
"--name",
default="World",
help="The name to greet."
)
args = parser.parse_args()
print(f"Hello, {
args.name}! This is ccyy-demo speaking.")
if __name__ == "__main__":
main()
在 src/ccyy_demo/__init__.py
的执行入口添加实现函数
from .main import main as ccyy_demo_main
def main() -> None:
ccyy_demo_main()
定义项目 (pyproject.toml
)
pyproject.toml
是现代Python项目的核心配置文件,它遵循 PEP 621 标准,用于定义项目的元数据、依赖项和构建系统。
uv init
已经为生成了一个 pyproject.toml
模板,默认内容如下:
[project]
name = "ccyy-demo"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.10"
dependencies = []
[project.scripts]
ccyy-demo = "ccyy_demo:main"
[build-system]
requires = ["hatchling"]
build-backend = "hatchli