文章目录

  • **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参数调优…