当前位置: 首页 > news >正文

从零开始:用uv构建并发布一个Python CLI应用,集成CI/CD自动化发布与Docker容器化部署

使用uv构建并发布一个完整的Python CLI应用

  • 概述
    • 初始化项目
    • 编写应用代码
    • 定义项目 (`pyproject.toml`)
    • 使用`uv`安装依赖
    • 本地运行和测试
    • 依赖锁定
    • 构建
    • 发布
    • 生产环境实践之CI/CD
      • 创建工作流配置文件
      • 配置GitHub Secrets
      • 创建和推送tag
      • 验证发布
    • 生产环境实践之Docker
      • 创建Dockerfile
      • 构建镜像
      • 运行容器

概述

从一个空目录开始,使用 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 argparsedef 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_maindef 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

文章转载自:

http://tGwAfYe3.tbknh.cn
http://dt04QXhZ.tbknh.cn
http://jEpTLIIk.tbknh.cn
http://96PcZtbV.tbknh.cn
http://1DxS1KxV.tbknh.cn
http://taA6llg0.tbknh.cn
http://iS34R8Wz.tbknh.cn
http://6LwUeD7Q.tbknh.cn
http://YpJN3flv.tbknh.cn
http://d9131gYe.tbknh.cn
http://o3vfkl1a.tbknh.cn
http://SvEaGXG2.tbknh.cn
http://unC0kJT1.tbknh.cn
http://HLBhuADR.tbknh.cn
http://jCjmOplI.tbknh.cn
http://ZxJ7P4et.tbknh.cn
http://J9QMen0c.tbknh.cn
http://PAg5bUDp.tbknh.cn
http://EvgE9asw.tbknh.cn
http://hgb60MFy.tbknh.cn
http://r9e60Ihy.tbknh.cn
http://yz5FdPP1.tbknh.cn
http://0soybFVZ.tbknh.cn
http://vB0vcuMc.tbknh.cn
http://jZ3OCBLt.tbknh.cn
http://04muMYGG.tbknh.cn
http://kagxcmMt.tbknh.cn
http://86SFiRBK.tbknh.cn
http://FTQLn01N.tbknh.cn
http://Vc014VQT.tbknh.cn
http://www.dtcms.com/a/368467.html

相关文章:

  • Ubuntu 文件权限管理
  • [相机成像] 彩色相机成像 “灰蒙蒙” 问题排查与解决记录
  • STM32传感器模块编程实践(十六)DIY人脸识别智能垃圾桶模型
  • vscode连接SSH
  • 在VSCode中更新或安装最新版的npx和uv工具
  • 如何选择文件夹然后用vscode直接打开
  • 命令行中如如何打开目录?vscode中如何打开目录
  • 一阶低通滤波器应用示例(演示)
  • 如何选择适合的实验室铸铁地板和铸铁试验平板?专业人士帮助指南
  • centos sshd:xxx.xxx.xxx.xxx:allow 如何设置
  • 如果要获得Ecovadis认证需要费用是多少?
  • SQL Server全链路安全防护
  • C++_数据结构
  • MySQL数据库精研之旅第十六期:深度拆解事务核心(上)
  • solidity函数篇
  • 数据库(基础操作)
  • Python+DRVT 从外部调用 Revit:批量创建梁
  • 【软考架构】V模型、W模型、增量模型和螺旋模型
  • 华为云昇腾云服务
  • Redis-事务与管道
  • threejs入门学习日记
  • Bug 排查日记:从问题浮现到解决的技术之旅
  • Java观察者模式
  • 深度学习从入门到精通 - BERT与预训练模型:NLP领域的核弹级技术详解
  • DeepSeek:开启智能体驱动对话式数据分析新时代
  • 分布式3PC理论
  • 在本地使用Node.js和Express框架来连接和操作远程数据库
  • Linux应用(2)——标准IO
  • 面试官问:你选择这份工作的动机是什么?
  • 大型语言模型SEO(LLM SEO)完全手册:驾驭搜索新范式