使用cookiecutter創建python項目

一、關于Python項目結構

Python 項目并沒有完全統一的 “固定結構”,但行業內有一些廣泛遵循的約定俗成的目錄結構(尤其針對可分發的包或大型項目)。同時,確實有工具可以快速生成這些標準化結構,提高開發效率,這在實際開發中非常常見。

對于需要打包、發布或多人協作的項目,典型結構如下:

對于簡單腳本或小項目,結構可以簡化(例如只有?src/?目錄和幾個核心文件)。

二、快速生成項目結構的工具Cookiecutter

今天我們介紹一下最流行的項目模板工具Cookiecutter,支持通過模板快速生成標準化結構,不僅限于 Python。

Cookiecutter 是一個由?Audrey Roy Greenfeld(開源社區活躍開發者)發起并主導開發的開源項目,其核心維護團隊包括多位社區貢獻者,并非由特定商業公司作為 “發行人” 或 “ publisher ” 進行官方發布。

2.1、安裝cookiecutter

如果要安裝到虛擬化環境下,在虛擬化終端執行“pip install cookiecutter”命令:

2.2、調用標準模板

運行:cookiecutter https://github.com/audreyr/cookiecutter-pypackage(Python 包標準模板),前提是能訪問github。

提示:執行改命令要提前安裝了git,在宿主機上安裝即可,并將git.exe所在目錄添加到了path環境變量中。

如果已經創建過項目的話,cookiecutter會在本地創建緩存模板,這樣的話可以直接用本地的,用法有:

cookiecutter C:\Users\yourname\.cookiecutters\cookiecutter-pypackage

或者

cookiecutter cookiecutter-pypackage

系統會自動從默認的緩存路徑?~/.cookiecutters/?下去尋找名為?cookiecutter-pypackage?的模板。

如果長時間用本地的,模板源有更新了,可以在聯網時用下面的命令更新本地模板:

cookiecutter https://github.com/audreyfeldroy/cookiecutter-pypackage.git --overwrite-if-exists

下載的模板文件默認緩存在本地的如下目錄下:

2.3、創建項目結構

接下來根據模板要求一次輸入下面的full_name,可以是作者名稱,團隊名稱,git上的用戶名或者昵稱,依次輸入下面的名稱,:

各字段的含義,我列個表:

提示信息含義示例回答重要性
full_name作者/維護者的全名(會寫入版權和作者信息)Haitao Luo?????
email作者的聯系郵箱your.email@example.com?????
github_username您的 GitHub 用戶名your-github-username????
project_name項目的正式名稱(可以包含空格,給人看的)My Awesome Project?????
project_slug項目的短標識(用于包名、目錄名,電腦看的)my_awesome_project?????
pypi_username您在 PyPI 上的用戶名(如果打算發布)your-pypi-username??
project_short_description項目的一句話簡短描述A Python package that does awesome things.????
version項目的初始版本號0.1.0???
use_pytest是否使用 pytest 作為測試框架y?(推薦)???
use_pypi_deployment_with_travis是否配置 Travis CI 自動發布到 PyPIn?(除非您明確需要)?
add_pyup_badge是否添加 Pyup 安全更新徽章n?(可選)?
command_line_interface是否添加命令行接口(CLI)Click?(推薦) 或?Argparse?或?No??

漏了一個pypi_package_name?就是您的包在“Python應用商店”(PyPI)里的“商品名”,需要獨一無二且便于用戶查找和安裝。

創建結束后可以看到左側樹上有了對應的項目結構,并在windows資源管理器查看:

Cookiecutter創建項目結構說明

1. 核心目錄

名稱說明
src/源代碼根目錄。這是現代 Python 打包(PyPA)推薦的結構。您的實際包(package)就在這里的某個文件夾下。這種結構可以避免無意中導入本地其他文件而非已安裝的包。
tests/測試代碼目錄。存放所有單元測試和集成測試文件。通常與?src/?下的模塊結構一一對應(例如?src/mypackage/core.py?的測試文件是?tests/test_core.py)。
docs/項目文檔目錄。通常使用 Sphinx 或 MkDocs 來構建項目的詳細文檔。
.github/GitHub 工作流配置。里面通常有?workflows/?文件夾,存放 GitHub Actions 的 YAML 配置文件,用于實現CI/CD(持續集成/持續部署),如自動運行測試、自動發布等。

2. 配置文件(關鍵文件)

名稱說明
pyproject.toml現代Python項目的核心配置文件。取代了舊的?setup.py。它定義了項目構建依賴(如setuptools)、項目元數據(名稱、版本、作者)、以及各種工具(如pytest、black、flake8)的配置。這是最重要的文件之一。
LICENSE開源許可證。規定了他人使用您代碼的權利和義務。常見的有MIT、Apache 2.0、GPL等。
README.md項目首頁文檔。這是項目的門面,通常包含項目介紹、安裝方法、快速使用示例、貢獻指南等。在GitHub和PyPI上會直接顯示。
.gitignoreGit忽略規則。指定哪些文件或目錄不應該被納入版本控制(如虛擬環境?venv/、編譯緩存?__pycache__/、IDE配置等)。
MANIFEST.in打包附加文件清單。當構建分發包(sdist)時,pyproject.toml?可能不會自動包含所有非代碼文件(如文檔、靜態資源)。這個文件用來指明需要額外包含哪些文件。
.editorconfig編輯器配置。幫助在不同編輯器和IDE之間保持代碼風格(如縮進、字符集)的一致性。

3. 文檔與規范文件

名稱說明
CODE_OF_CONDUCT.md行為準則。規定了社區交流合作的規范,為所有貢獻者創造一個友好的環境。
CONTRIBUTING.md貢獻指南。詳細說明如何為項目做貢獻,如如何提交Issue、如何拉取請求(Pull Request)、代碼風格要求等。
HISTORY.md更新日志。記錄每個版本的重大變更、新增功能和修復的Bug。
justfileJust命令運行器配置just?是一個類似?make?的命令運行工具,用于定義和管理項目常用的命令(如運行測試、構建文檔、格式化代碼等)。這是一個可選但很方便的工具。

需要注意的是,此時的venv虛擬化環境和通過cookiecutter創建的項目是同一目錄級別,這種情況下是一個虛擬化環境適配多個project,如果想做個項目隔離,那么venv虛擬化目錄在你創建的project里面,這個換一篇再介紹。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/922452.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/922452.shtml
英文地址,請注明出處:http://en.pswp.cn/news/922452.shtml

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

相關文章

臺積電生態工程深度解析:從晶圓廠到蜂巢的系統架構遷移

當半導體巨頭將工廠視為生態系統,用工程思維解決環境問題概述:生態系統的工程化再造臺積電近日開展的"積蜜"項目絕非簡單的企業CSR行為,而是一場將生態系統視為復雜系統進行工程化改造的技術實踐。本文將從系統架構、數據監控、循環…

從零實現一個簡易計算器

最近在刷算法題時,遇到了實現計算器的問題。一開始覺得很簡單,但真正動手實現時才發現其中有很多細節需要考慮。今天就來分享一下我的實現思路和學到的經驗。問題分析我們需要實現一個能夠處理加減乘除四則運算的計算器,要正確處理運算符的優…

Actix-webRust Web框架入門教程

文章目錄引言Actix-web是什么?準備工作你的第一個Actix-web應用理解代碼結構處理請求和響應接收請求數據返回響應中間件 - 增強你的應用狀態管理和依賴注入實用示例:構建RESTful API測試你的Actix-web應用部署Actix-web應用結語額外資源引言 嘿&#xf…

若依框架前端通過 nginx docker 鏡像本地運行

1. 前言 項目運行過程圖:對于前端項目通過命令 npm run build 打包后,無法直接運行。存在如下錯誤:可以通過配置 nginx 服務器運行前端項目解決如上問題。 2. Nginx 運行 采用 docker 鏡像的方式運行,docker-compose.yml 文件內容…

淺聊一下HTTP協議

在日常上網瀏覽網頁、刷視頻時,背后都離不開 HTTP 協議的支持。作為 Web 世界的 “交通規則”,它負責服務器和客戶端瀏覽器之間的數據傳輸。這篇文章就帶大家全面了解 HTTP 協議,從基本概念到通信細節,再到安全相關的 HTTPS&#…

機器人控制器開發(定位——cartographer ros2 使用2)

文章總覽 1 純定位模式 當完成建圖后,會生成pbstream格式的地圖文件 配置純定位模式的lua腳本 backpack_2d_localization.lua include "backpack_2d.lua"TRAJECTORY_BUILDER.pure_localization_trimmer {max_submaps_to_keep 3, } POSE_GRAPH.optimi…

《大數據之路1》筆記3:數據管理

一 元數據 1.1 元數據概述 定義: 元數據是關于數據的數據,元數據打通了源數據、數據倉庫、數據應用,記錄了數據從生產到消費的全部過程。元數據主要記錄數據倉庫中模型的定義、各層級間的映射關系、監控數據倉庫的數據狀態和ETL的任務運行狀態…

排序實現java

排序算法概述Java中實現排序可以通過多種方式,包括內置方法、自定義算法或使用第三方庫。常見的排序算法有冒泡排序、選擇排序、插入排序、快速排序、歸并排序等。使用Arrays.sort()方法對于數組排序,Java提供了Arrays.sort()方法,支持對基本…

51c大模型~合集182

我自己的原文哦~ https://blog.51cto.com/whaosoft/14174587 #LaV-CoT 超越GPT-4o,螞蟻集團與南洋理工大學提出:首個語言感知的視覺思維鏈 隨著大型視覺語言模型(VLM)的飛速發展,它們在處理復雜的視…

C++ STL之deque的使用和模擬實現

目錄 deque 核心本質與定位 與stack和queue的關系: deque的使用 deque的底層實現 deque的原理介紹 deque的缺陷 總結: deque deque文檔 : deque 翻譯: 雙端隊列 deque(通常發音類似“deck”)是“double-ended queue”(雙端隊列&…

布草洗滌廠設備租賃押金原路退回系統—東方仙盟

設備租賃狀態設備管理添加設備設備收押金設備退押金在布草洗滌行業的運營版圖中,設備租賃是連接廠商與客戶的重要紐帶,而押金的收取與退還則是這一環節中關乎信任與效率的關鍵節點。未來之窗布草洗滌廠深諳此道,專為設備租賃業務打造的 “押金…

換源rocklinux和centos

一、Rockylinux換源,國外的源換成國內的源#nmcli connection modify ens33 ipv4.addresses 192.168.121.11 ipv4.gateway 192.168.121.2 ipv4.method manual ipv4.dns 114.114.114.114 connection.autoconnect yes修改地址#systemctl stop firewalld#systemctl diab…

第一部分:服務器硬件配置

目錄1.1 服務器上架與連線1.2 啟用CPU虛擬化功能(BIOS設置)1.3 配置RAID存儲步驟1:進入RAID配置界面步驟2:確認RAID控制器信息步驟3:創建系統RAID(用于安裝ESXi)步驟4:創建數據RAID&…

手搓一個 DELL EMC Unity存儲系統健康檢查清單

寫在前面對于DELL EMC存儲系統Unity的一些深度的健康檢查通過Web的Unisphere圖形化界面是做不到的,圖形化界面只能看到是否有告警,物理的東西是否有問題的,邏輯的Pool和LUN等是否ready,再深入的潛在的問題是查不到的。另外&#x…

【數據結構】二叉樹的概念

01 概念定義:二叉樹既然叫二叉樹,顧名思義即度最大為2的樹稱為二叉樹。 它的度可以為 1 也可以為 0,但是度最大為 2 。 一顆二叉樹是節點的一個有限集合,該集合:① 由一個根節點加上兩棵被稱為左子樹和右子樹的二叉樹組…

【RK3576】【Android14】如何在Android14下單獨編譯kernel-6.1?

單獨編譯kernel依賴如下幾個源碼:【交叉編譯工具鏈】prebuilts/clang/host/linux-x86/clang-r487747c【內核源碼】kernel-6.1為什么Android下編譯內核使用clang作為交叉編譯工具鏈而不是GCC?Android 14 選擇使用預置的 Clang 工具鏈(如 clang…

什么是Redis的Pipeline

介紹Redis的Pipeline是一種網絡優化技術,在沒有Pipeline的時候,客戶端往redis發送請求,客戶端需要等到redis響應之后才能發送下一個請求。而Pipeline,使redis可以一次性接收多個請求。減少了通信次數,顯著的提高了性能…

【ElementUI el-table跨頁勾選】

一、el-table需加上refs和 row-key屬性 二、type"selection"勾選框 需加上 reserve-selection儲備選擇屬性 三、在分頁請求數據時&#xff0c;觸發 setSelected()方法 四、在 selection-change變化時保存 selectedRows <el-table ref"tables" :data&quo…

論文閱讀/博弈論/拍賣:《Truthful Auction for Cooperative Communications》

摘要&#xff1a;一方面&#xff0c;協作通信由于其在提升無線網絡容量方面的巨大潛力而日益受到關注。另一方面&#xff0c;協作通信技術的實際應用卻很少見&#xff0c;即使在一些對帶寬需求極高的應用場景中&#xff0c;系統設計者也并未采用協作通信技術來開發創新的網絡解…

系統軟中間件:連接軟件與硬件的橋梁

理解“系統軟中間件”這個術語很重要&#xff0c;它實際上是兩個緊密相關但又不同的概念的組合&#xff1a; 系統軟件中間件 嚴格來說&#xff0c;“系統軟中間件”不是一個標準的獨立術語。它通常指的是屬于系統軟件范疇的中間件&#xff0c;或者理解為作為系統軟件重要組成部…