使用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