從零開始:用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://www.pswp.cn/pingmian/95497.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/95497.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/95497.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何在Qt中使用周立功USB轉CAN卡

如何在 Qt 中使用周立功 USB 轉 CAN 卡 文章目錄如何在 Qt 中使用周立功 USB 轉 CAN 卡一、簡介二、準備工作三、使用四、運行效果五、寫在最后?一、簡介 最近在工程中用到了周立功的 USB 轉 CAN 卡,需求是要通過上位機進行通信,因此有了這篇文章。 有…

JavaScript 源碼剖析:從字節碼到執行的奇妙旅程

JavaScript,這門風靡全球的腳本語言,以其靈活性和跨平臺性征服了無數開發者。我們每天都在使用它,但它在后臺是如何工作的?一段看似簡單的JS代碼,在執行之前究竟經歷了哪些“變形記”?今天,讓我…

FPGA—硬件電路一旦上電配置完成,各個功能模塊會并行地持續工作

1.示例代碼參考這段代碼是用 Verilog 編寫的一個 LED 閃爍控制模塊,主要實現了 LED 按一定時間間隔循環移位閃爍的功能。下面詳細解釋其架構組成:模塊定義與端口聲明模塊名為 led_flash,包含三個端口:sys_clk:輸入端口…

從零到上線:Docker、Docker Compose 與 Runtime 安裝部署全指南(含實戰示例與應用場景)

文章目錄一、Docker 安裝1. Ubuntu / Debian(官方倉庫)2. RHEL / CentOS / Rocky / AlmaLinux3. 驗證4. macOS / Windows(Docker Desktop)二、Docker Compose(V2)安裝與基本用法1) 驗證2) 最小示例&#xf…

Java基礎篇02:基本語法

1 注釋 注釋是寫在程序中對代碼進行解釋說明的文字,方便自己和其他人查看,以便理解程序的。注釋分為三種:單行注釋、多行注釋、文檔注釋注釋不影響代碼的執行: 原因是編譯后的文件已經沒有注釋了// 這是單行注釋:。通常…

【SECS/GEM 】SECS/GEM 日志管理相關的消息

明白 ? 在 SECS/GEM 架構里,設備日志(Equipment Logging 主要涉及 事件日志(Event Log)、報警日志(Alarm Log)、配方操作日志(Recipe Log)、以及用戶操作/命令日志。這些日志通過 S…

ragas 框架使用Chat-GLM模型報API 調用參數有誤,請檢查文檔

ragas 框架使用Chat-GLM模型報API 調用參數有誤,請檢查文檔解決方案 from ragas.llms import LangchainLLMWrapper # 點擊LangchainLLMWrapper 進入這個類找到這個方法直接 return 0.1出現問題原因 ChatGLM 不支持設置temperature等于0,默認的值太小了

Kaggle - LLM Science Exam 大模型做科學選擇題

Kaggle - LLM Science Exam Science Exam Simple Approach w/ Model Hub | Kaggle Platypus2-70B with Wikipedia RAG | Kaggle 5個選項只有一個選項正確,目標:回答一個選項序列(只有前三個有效) 輸出正確選項 (可…

貪吃蛇魚小游戲抖音快手微信小程序看廣告流量主開源

核心優勢:為流量主運營者與新手量身打造 1. 為流量主運營者破解成本困局 本地化運行,零服務器成本:數據運行與存儲全程在用戶手機本地完成,無需部署服務器及后臺系統,徹底擺脫服務器租賃、維護等硬性支出,…

PDF Reader 編輯閱讀工具(Mac中文)

原文地址:PDF Reader 編輯閱讀 for Mac v5.2.0 PDF Reader Pro Mac,是一款PDF編輯閱讀,PDF Reader Pro讓您直接在 Mac 上進行PDF文件閱讀、筆記、編輯、轉換、創建PDF、簽署PDFs、填寫PDF Forms表單、設置密碼、合并拆分文件、水印等等&…

Django REST framework:SimpleRouter 使用指南

1. SimpleRouter 是什么? SimpleRouter 是 DRF(Django REST framework)提供的路由器,能根據 ViewSet 自動生成標準的 REST 路由,包括: GET /resources/ → 列表(list)POST /resource…

覆蓋Transformer、GAN:掩碼重建正在重塑時間序列領域!

隨著大數據與深度學習的發展,時間序列分析的建模能力顯著提升,而掩碼重建作為一種自監督學習范式,已成為提升序列表征能力的重要技術。該方法通過隨機掩碼部分數據并重建原始序列,迫使模型挖掘時序依賴性與潛在模式,在…

用AI做TikTok影視解說,全流程全自動成片,不懂外語也能做全球矩陣!

多語種解說: 短劇出海狂吸美金 多語種解說搶先機 TikTok、YouTube等平臺,尤其在非英語市場,內容供給仍遠遠不足,每一個小語種市場都是潛在藍海。 有人用英語講仙俠、西語講爽劇、日語講宮斗、阿語講懸疑,一夜漲粉百…

解密大語言模型推理:輸入處理背后的數學與工程實踐

解密大語言模型推理:輸入處理背后的數學與工程實踐當你向ChatGPT提問時,短短幾秒內就能獲得流暢的回答,這背后隱藏著怎樣的技術魔法?答案在于大語言模型高效推理過程中精妙的輸入處理機制。在現代大語言模型推理中,輸入…

02、連接服務器的幾種方式

02、連接服務器的幾種方式 1、Xshell 適用于Windows https://www.xshell.com/en/free-for-home-school/ 2、Termius 適用于MacOS 直接蘋果商店下載即可 3、IDEA 連接 Tools - Deployment - Browse Remote Host 1、打開Browse Remote Host2、添加服務3、輸入服務器連接信息并測試…

高并發系統設計方案(直播場景)

最近在準備面試,正把平時積累的筆記、項目中遇到的問題與解決方案、對核心原理的理解,以及高頻業務場景的應對策略系統梳理一遍,既能加深記憶,也能讓知識體系更扎實,供大家參考,歡迎討論。 1. 微服務拆分 …

網絡編程基礎:一文搞懂 Socket、HTTP、HTTPS、TCP/IP、SSL 的關系

在日常開發中,我們經常聽到 Socket、HTTP、HTTPS、TCP/IP、SSL 這些術語,這些概念往往容易混淆,且讓人感到困惑。本文將用最通俗易懂的方式來講清這些網絡概念及其相互關系。一、從寄信說起:網絡通信的本質假如你要給遠方的朋友寄…

查看LoRA 哪個適配器處于激活狀態(67)

哪個適配器處于激活狀態 當前哪個適配器處于激活狀態?我們來查看active_adapter屬性就知道了 peft_model.active_adapter輸出 default試試另一個(適配器) 你更想試試另一個(適配器)嗎?只需調用set_adapter()方法即可。 peft_model.set_adapter(yoda) peft_model.act…

??Nginx高性能Web服務器實戰:從協議原理到運維優化??

目錄 前言 一、Web基礎概念 1.1 什么是Web? 1.2 B/S架構模型 1.3 Web請求與響應流程 1.4 靜態資源 vs 動態資源 二、HTTP/HTTPS協議詳解 2.1 HTTP與HTTPS區別 2.2 HTTPS握手流程 2.3 HTTP狀態碼大全 三、Nginx核心知識 3.1 Nginx簡介 3.2 Nginx vs Apache 3.3 Nginx…

【先楫HPM5E00_EVK系列-板卡測評3】hpm5e00evk平臺中斷、定時器、PWM、USART等基礎功能詳解

此文介紹了利用先楫半導體(hpm)官方hpm5e00_evk開發板使用的主控芯片的一些原理性知識,無實驗內容展示,主要匯總了先楫半導體hpm5e00主控芯片的中斷、定時器、pwm、usart等功能,主要內容來源于B站“HPM_FAE”的視頻和官…