Python代碼規范與靜態檢查(ruff/black/mypy + pyproject.toml + Makefile)自動化工具鏈介紹

文章目錄

  • **1. 核心工具的作用**
    • **(1) `black`:代碼格式化工具**
    • **(2) `ruff`:代碼質量檢查工具**
    • **(3) `mypy`:靜態類型檢查工具**
  • **2. `pyproject.toml`:統一配置中心**
    • **示例配置**(`pyproject.toml`):
    • **優勢**:
      • - **統一性**:所有工具配置集中管理,避免分散的配置文件。
      • - **可維護性**:通過 `pip install .[dev]` 安裝開發依賴,簡化環境搭建。
  • **3. `Makefile`:自動化構建腳本**
    • **示例 `Makefile`**:
    • **使用方式**:
  • **4. 整體工作流程**
    • 1. **代碼編寫**:使用 `black` 自動格式化代碼,確保風格統一。
    • 2. **靜態檢查**:運行 `ruff` 和 `mypy`,檢查語法、風格和類型錯誤。
    • 3. **構建與測試**:通過 `Makefile` 自動化構建和測試流程。
    • 4. **CI/CD 集成**:在持續集成(如 GitHub Actions)中運行 `make check` 和 `make test`,確保提交代碼符合規范。
  • **5. 優勢總結**
  • **6. 實際應用場景**
    • - **團隊協作**:通過統一的代碼規范和工具鏈,減少代碼審查中的風格爭議。
    • - **CI/CD 集成**:在代碼合并前自動運行 `make check` 和 `make test`,確保代碼質量。
    • - **新項目初始化**:通過模板項目快速搭建包含上述工具鏈的開發環境。
  • **7. 示例項目結構**

代碼規范與靜態檢查(結合 ruff/black/mypypyproject.tomlMakefile)是一種現代 Python 項目開發的最佳實踐,旨在通過自動化工具統一代碼風格、檢查潛在錯誤、提升代碼質量,并通過配置文件和構建工具簡化開發流程。以下是詳細解釋:


1. 核心工具的作用

(1) black:代碼格式化工具

  • 功能:自動將 Python 代碼格式化為符合 PEP 8 的標準。
  • 特點
    • “無情”格式化:不支持自定義規則(如縮進大小),強制統一風格。
    • 減少爭論:團隊無需討論代碼風格,直接運行 black 即可。
  • 示例命令
    black your_script.py  # 格式化單個文件
    black .               # 格式化整個項目
    

(2) ruff:代碼質量檢查工具

  • 功能:快速檢測代碼中的語法錯誤、風格問題(如 PEP 8 違規)、潛在 bug 等。
  • 特點
    • flake8 更輕量且支持更多規則。
    • 可通過配置文件(如 pyproject.toml)忽略特定規則。
  • 示例命令
    ruff check your_script.py  # 檢查單個文件
    ruff check .               # 檢查整個項目
    

(3) mypy:靜態類型檢查工具

  • 功能:在運行代碼前檢測類型錯誤(如變量類型不匹配)。
  • 特點
    • 支持類型注解(如 def func(x: int) -> str:)。
    • 幫助提前發現潛在運行時錯誤。
  • 示例命令
    mypy your_script.py  # 類型檢查單個文件
    mypy .               # 類型檢查整個項目
    

2. pyproject.toml:統一配置中心

  • 作用:作為 Python 項目的配置文件,集中管理以下內容:
    1. 依賴管理:聲明運行時依賴和開發依賴。
    2. 工具配置:為 blackruffmypy 等工具提供統一配置。
    3. 構建系統:定義項目構建方式(如使用 setuptoolspoetry)。

示例配置pyproject.toml):

[build-system]
requires = ["setuptools>=60.0"]
build-backend = "setuptools.build_meta"[project]
name = "my_project"
version = "0.1.0"
dependencies = ["requests>=2.25.1","numpy>=1.19.0",
][project.optional-dependencies]
dev = ["black","ruff","mypy",
][tool.ruff]
line-length = 119
ignore = ["C408", "E501"]  # 忽略特定規則[tool.black]
skip-magic-trailing-comma = false[tool.mypy]
strict = true  # 啟用嚴格模式

優勢

- 統一性:所有工具配置集中管理,避免分散的配置文件。

- 可維護性:通過 pip install .[dev] 安裝開發依賴,簡化環境搭建。


3. Makefile:自動化構建腳本

  • 作用:通過預定義的規則(如 make formatmake check),自動化執行常見任務。
  • 典型用途
    • 格式化代碼。
    • 運行檢查工具(ruffmypy)。
    • 構建和測試項目。
    • 清理生成的文件。

示例 Makefile

format:black .check:ruff check .mypy .test:pytestbuild:python setup.py sdist bdist_wheelclean:rm -rf dist/* build/* .pytest_cache/

使用方式

make format   # 自動格式化代碼
make check    # 運行代碼檢查和類型檢查
make test     # 運行測試
make clean    # 清理生成的文件

4. 整體工作流程

1. 代碼編寫:使用 black 自動格式化代碼,確保風格統一。

2. 靜態檢查:運行 ruffmypy,檢查語法、風格和類型錯誤。

3. 構建與測試:通過 Makefile 自動化構建和測試流程。

4. CI/CD 集成:在持續集成(如 GitHub Actions)中運行 make checkmake test,確保提交代碼符合規范。


5. 優勢總結

目標工具組合效果
代碼風格統一black + pyproject.toml所有開發者遵循相同格式,減少風格爭論。
代碼質量保障ruff + mypy + pyproject.toml自動檢測語法錯誤、潛在 bug 和類型錯誤。
自動化流程Makefile通過簡單命令(如 make check)完成復雜任務,提升開發效率。
依賴管理pyproject.toml統一管理依賴和開發工具,簡化環境搭建。

6. 實際應用場景

- 團隊協作:通過統一的代碼規范和工具鏈,減少代碼審查中的風格爭議。

- CI/CD 集成:在代碼合并前自動運行 make checkmake test,確保代碼質量。

- 新項目初始化:通過模板項目快速搭建包含上述工具鏈的開發環境。


7. 示例項目結構

my_project/
├── pyproject.toml          # 工具配置和依賴管理
├── Makefile                # 自動化腳本
├── src/
│   └── my_project.py       # 主代碼
├── tests/
│   └── test_my_project.py  # 測試代碼
└── README.md               # 項目說明

通過結合 blackruffmypypyproject.tomlMakefile,開發者可以構建一個高效、規范且易維護的 Python 項目流程,顯著提升代碼質量和團隊協作效率。

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

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

相關文章

軟件需求管理過程詳解

需求管理過程需求管理是軟件工程和系統開發中的核心過程,它確保項目始終圍繞正確、穩定且可追溯的需求進行。在復雜系統開發中,需求往往動態變化,需求管理通過系統化的方法控制變更、維護版本、建立追溯關系,從而降低項目風險、保…

MySQL性能優化實戰指南:從入門到精通的完整優化體系

MySQL性能優化實戰指南:從入門到精通的完整優化體系🚀 前言:在當今數據驅動的時代,MySQL作為世界上最流行的開源關系型數據庫,其性能優化能力直接決定了應用系統的響應速度和用戶體驗。本文將從多個維度深入探討MySQL優…

KingbaseES主備讀寫分離集群安裝教程

首先我們先要找數據庫集群安裝軟件和腳本。這里我事先安裝一臺單機。 [rootlocalhost zip]# mkdir -p /home/kingbase/software [rootlocalhost zip]# scp -r * /home/kingbase/software/ #安裝軟件和腳本在單機版本的/opt/Kingbase/ES/V9/ClientTools/guitools/DeployTools/z…

electron程序適配loongArch64

一、原始項目 1.原始程序適配arm,x86國產linux設備;新增需求適配loongArch64麒麟v10sp1。 2.原始devDependencies "devDependencies": {"electron": "^17.2.0","electron-builder": "^23.0.3",}二、可能遇到的問…

窗口系統(windowing system)的架構思考

我想做一個通用窗口系統,窗口、控件等,一切都抽象成樹形結構的層疊矩形塊,可支持半透明、模糊等混合選項,那么每個窗口是不是需要一塊存儲區?我之前的代碼為了計算模糊,還不止一塊,要三塊。那么…

極簡工具箱:安卓工具箱合集

軟件介紹 極簡工具箱是一個安卓工具箱合集軟件;軟件支持安卓。 它支持將近 400 個實用功能,支持將近 40 款單機游戲,提供 140 多個實用網站導航,包括電子書導航、學習導航、設計導航、產品經理導航、大數據導航、文檔格式轉換、…

TOGAF八步一法筆記2

業務需求和驗收標準一旦方向確定,接下來的關鍵就是:創建業務需求、明確驗收標準當“預備階段”完成,能力愿景和范圍被管理層確認后,我們正式進入能力建設的“實施軌道”。而這個軌道的起點,是兩個核心動作:…

各種讀取csv文件的工具性能比較

在翻閱calamine作者的quick-csv存儲庫時無意中看到有個10年前的csv讀取比賽, 把比賽選手源程序下載下來測試看到底有多快。 git clone https://bitbucket.org/ewanhiggs/csv-game.git這些源程序只有比賽程序本身,依賴的文件有的在主頁,有的在makefile中…

HTML <iframe> 標簽 如何把html寫入iframe標簽

標簽 如何把html寫入iframe標簽 使用srcdoc屬性 HTML iframe 標簽 參考 定義和用法 <iframe> 標簽定義行內框架&#xff08;內聯框架&#xff09;。 行內框架用于在當前 HTML 文檔中嵌入另一個文檔。

Java Spark例子程序

目錄spark基礎&rdddocsRDDspark架構Spark 對比 hadoop MapReducespark maven依賴Spark的checkpointtransformations、shuffle、actionsreduceByKey的用法groupByKey的用法count / count distinct例子&#xff1a;單詞計數例子&#xff1a;一批人員年齡數據求平均(rdd)例子&…

《代碼重生:楊蓉與62.webp》

《代碼重生&#xff1a;楊蓉與62.webp》2045年&#xff0c;星耀城。雨絲斜織在量子玻璃幕墻上&#xff0c;霓虹倒影如液態代碼流淌。楊蓉坐在“時光回溯實驗室”的終端前&#xff0c;面前懸浮著一行行泛黃的日志——那是從2018年GitHub快照中提取的原始構建記錄。她指尖輕點&am…

軟考 系統架構設計師系列知識點之雜項集萃(123)

接前一篇文章:軟考 系統架構設計師系列知識點之雜項集萃(122) 第227題 某公司欲開發一種工業機器人,用來進行汽車零件的裝配。公司的架構師經過分析與討論,給出了該機器人控制軟件的兩種候選架構方案:閉環控制和分層結構。以下對于這兩者候選框架的選擇路由,錯誤的是(…

Sonatype Nexus Repository Manager docker版本安裝

docker 網址 https://hub.docker.com/r/sonatype/nexus3 拉取鏡像 docker pull sonatype/nexus3創建docker docker run -d -p 8081:8081 --name nexus --restart always sonatype/nexus3查看密碼 docker exec nexus cat /nexus-data/admin.password導出docker image 鏡像 …

Java Stream API:讓業務數據處理更優雅

在 Java 業務開發中&#xff0c;我們經常需要對集合數據進行**篩選&#xff08;filter&#xff09;、轉換&#xff08;map&#xff09;、聚合&#xff08;collect&#xff09;**等操作。比如從一批結果中過濾出符合條件的記錄&#xff0c;就像這樣&#xff1a; 假數據&#xf…

Win11和Win10共享打印機提示709用添加Windows憑據來解決的小方法

我們在使用共享打印機打印文件時或者添加共享打印機的時候&#xff0c;遇到了系統提示錯誤709的問題&#xff0c;導致打印失敗、共享失敗&#xff0c;如果你現在正好也遇到了這一問題&#xff0c;那么不妨來看看下面吳師傅使用過的這個方法&#xff0c;希望可以能夠幫助大家有效…

【嵌入式STM32】I2C總結

I2C誕生于上世紀80年代初&#xff0c;由飛利浦&#xff08;現在的恩智浦NXP&#xff09;為解決微控制器與外圍芯片之間繁瑣的連接問題而設計。 僅僅兩根線——SCL&#xff08;時鐘線&#xff09;和SDA&#xff08;數據線&#xff09;&#xff0c;就能實現多設備間的雙向通信。 …

WPF 監控CPU、內存性能

本段代碼是一個封裝的用戶控件<UserControl x:Class"YF_Frame.PerformanceMonitor"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc"http://schemas.…

Rust學習筆記(四)|結構體與枚舉(面向對象、模式匹配)

本篇文章包含的內容1 結構體1.1 定義和初始化結構體1.2 Tuple Struct1.3 結構體方法&#xff08;Rust 面向對象&#xff09;1.4 關聯函數2 枚舉2.1 定義和使用枚舉2.2 將數據附加到枚舉的變體中2.3 Option 枚舉2.4 模式匹配2.4.1 match語句2.4.2 if let語句1 結構體 1.1 定義和…

C++——分布式

文章目錄一、什么是分布式&#xff1f;核心特點為什么需要分布式&#xff1f;分布式 vs 集中式常見分布式場景挑戰與難點二、 簡述下CAP理論2.1 簡述2.2 詳細三、 簡述下分布式中的2PC2.1 詳細3.2 簡述三 、簡述下Raft協議3.1 詳細3.2 簡述四 grpc框架4.1 RPC&#xff08;Remot…

Redis面試精講 Day 20:Redis大規模部署性能調優

【Redis面試精講 Day 20】Redis大規模部署性能調優 開篇 歡迎來到"Redis面試精講"系列第20天&#xff01;今天我們將深入探討Redis在大規模部署場景下的性能調優策略&#xff0c;這是高級工程師和架構師面試必考的核心知識點。本文將從操作系統配置、Redis參數調優…