python 格式化利器

工具

✅ 一站式推荐方案(轻量 + 快速)

工具作用是否必须
ruff格式化 + lint + isort 一体化✅ 必须
mypy静态类型检查,适配 SQLAlchemy 2.0✅ 推荐
pytest + pytest-cov测试 + 覆盖率✅ 推荐
bandit安全审查可选
pre-commit本地提交前自动检查✅ 强烈推荐

相关步骤

🧰 步骤一:用 uv 安装依赖

uv pip install -U ruff mypy pytest pytest-cov bandit pre-commit

🧼 步骤二:使用 Ruff 进行格式化 + Lint(核心)

✅ 创建 pyproject.toml 配置文件(Ruff + Mypy 一起放)

# pyproject.toml
[tool.ruff]
line-length = 100
extend-select = ["I"]  # 自动 import 排序(isort)
fix = true             # 自动修复[tool.mypy]
plugins = ["sqlalchemy.ext.mypy.plugin"]
ignore_missing_imports = true
strict_optional = true
disallow_untyped_defs = true
check_untyped_defs = true
warn_unused_ignores = true

✅ 执行 Ruff 格式化和检查:

# 格式化(相当于 black + isort)
ruff format .# 检查代码规范(相当于 flake8)
ruff check .

🧪 步骤三:类型检查(尤其适配 SQLAlchemy 2.0)

mypy app/  # 假设你的代码放在 app/ 目录

🧹 步骤四:配置 pre-commit(自动检查)

# .pre-commit-config.yaml
repos:- repo: https://github.com/astral-sh/ruff-pre-commitrev: v0.3.3hooks:- id: ruff- id: ruff-format- repo: https://github.com/pre-commit/mirrors-mypyrev: v1.8.0hooks:- id: mypy- repo: https://github.com/PyCQA/banditrev: 1.7.4hooks:- id: bandit

✅ 安装并激活

pre-commit install

🧰 步骤五(可选):CI 自动检查(GitHub Actions)

# .github/workflows/code-quality.yml
name: Code Qualityon: [push, pull_request]jobs:lint:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- name: Setup Pythonuses: actions/setup-python@v4with:python-version: '3.11'- name: Install depsrun: |pip install ruff mypy bandit- name: Ruff Checkrun: ruff check .- name: Mypy Checkrun: mypy app/- name: Bandit Checkrun: bandit -r app/
任务命令
格式化代码ruff format .
检查代码规范ruff check .
类型检查mypy app/
安全检查bandit -r app/
启用 git 提交检查pre-commit install
一键清洗pre-commit run --all-files

Makefile 模板

✅ 推荐 Makefile 模板(FastAPI + SQLAlchemy + Ruff + Mypy 专用)

# Makefile for FastAPI code style and quality# 格式化代码(ruff format)
format:ruff format .# Lint 检查(ruff check)
lint:ruff check .# 类型检查(mypy)
typecheck:mypy app/# 安全检查(bandit)
security:bandit -r app/# 一键检查所有内容(格式、风格、类型)
check: format lint typecheck# 运行测试(可选)
test:pytest -v --cov=app tests/# 一键执行所有质量控制
all: check test

✅ 你现在可以使用的命令:

命令说明
make format自动格式化所有代码
make lint使用 ruff 检查代码规范
make typecheck用 mypy 做类型检查
make security用 bandit 做安全扫描
make check格式化 + Lint + 类型检查 一键执行
make test运行测试(可选)
make all执行所有检查 + 测试 ✅

✅ 回答:只要你有 Makefile 文件,并且系统上安装了 make 命令,就可以直接用:

使用make 命令

✅ 为什么要先 format,再 lint?

顺序原因
✅ 先 ruff format自动修复空格、缩进、import 顺序等格式问题
✅ 再 ruff check才能看到真正“逻辑/语法层面”的 lint 问题
❌ 如果先 check,再 format会先报一堆格式错误,format 后再跑 check 没意义(重复跑)

安装钩子

pre-commit install  # 安装 Git 钩子
pre-commit run --all-files  # 检查所有文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/39886.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux UDP网络编程套接字sockets

目录 一、预备知识 1、IP地址 2、端口号 3、Socket网络通信 4、认识TCP/UDP协议 (1)TCP协议 (2)UDP协议 (3)网络字节序 二、socket网络套接字 1、概念 2、Socket 的地址结构和一系列转换函数 &a…

VUE3项目VITE打包优化

VUE3项目VITE打包优化 代码加密依赖配置效果对比图 自动导入依赖配置 代码压缩依赖配置效果对比图 图片压缩依赖配置效果对比图 字体压缩总结与实践运用效果 代码加密 依赖 npm install -D vite-plugin-bundle-obfuscator配置 import vitePluginBundleObfuscator from "…

NO.57十六届蓝桥杯备战|基础算法-高精度|加减乘除|模拟竖式计算(C++)

当数据的值特别⼤,各种类型都存不下的时候,此时就要⽤⾼精度算法来计算加减乘除: 先⽤字符串读⼊这个数,然后⽤数组逆序存储该数的每⼀位;利⽤数组,模拟加减乘除运算的过程。 ⾼精度算法本质上还是模拟算法…

最新DeepSeek-V3-0324:AI模型性能提升与新特性解析

文章目录 性能提升概览新特性解析1. 推理任务表现提高2. 前端开发能力增强3. 中文写作与搜索能力优化4. 模型开源 总结与展望 随着人工智能技术的快速发展,模型的迭代更新成为推动技术进步的重要力量。最近,DeepSeek团队发布了其V3模型的最新小版本更新—…

linux常用指令(7)

今天还是继续学习linux相关的指令,基础越牢固,就越有利于我们后面的学习,那么话不多说,来看. 1.head指令 功能描述:用于显示文件的开头部分内容,默认情况下head显示文件的前10行内容. 基本语法:head 文件 选项:-n nums 显示前nums行内容 …

数仓架构告别「补丁」时代!全新批流一体 Domino 架构终结“批流缝合”

在数字化转型的浪潮中,企业对数据处理的需求日益复杂多变,传统的批处理和流处理架构已难以满足日益增长的性能和时效性要求。在此背景下,YMatrix CEO 姚延栋发布了深度文章《数仓架构告别「补丁」时代!全新批流一体 Domino 架构终…

HTB 笔记 | SQL 注入基础 + 实操小练习 P2

1. 数据库类型 数据库分为两类: 关系型数据库(Relational Databases) 使用表格存储数据(行和列)。数据通过“键”连接,形成逻辑关系。示例:MySQL、PostgreSQL、SQL Server。特点:结…

MySQL 入门大全:数据类型

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…

解决 Not allowed to load local resource 问题

记录一下遇到的问题&#xff1a;html跳转本地资源&#xff0c;用相对路径 这样是不对的&#xff0c;要用 <script src"/jquery.min.js"></script> 网络路径也行&#xff0c;慢了一点 记得一定要关闭浏览器的广告屏蔽器 绝对路径也行&#xff0c;不过要…

STM32实现智能温控系统(暖手宝):PID 算法 + DS18B20+OLED 显示,[学习 PID 优质项目]

一、项目概述 本文基于 STM32F103C8T6 单片机&#xff0c;设计了一个高精度温度控制系统。通过 DS18B20 采集温度&#xff0c;采用位置型 PID 算法控制 PWM 输出驱动 MOS 管加热Pi膜&#xff0c;配合 OLED 实时显示温度数据。系统可稳定将 PI 膜加热至 40℃&#xff0c;适用于…

[深度学习]图像分类项目-食物分类

图像分类项目-食物分类(监督学习和半监督学习) 文章目录 图像分类项目-食物分类(监督学习和半监督学习)项目介绍数据处理设定随机种子读取文件内容图像增广定义Dataset类 模型定义迁移学习 定义超参Adam和AdamW 训练过程半监督学习定义Dataset类模型定义定义超参训练过程 项目介…

C++初阶入门基础二——类和对象(中)

1类的默认成员函数 默认成员函数就是用户没有显式实现&#xff0c;编译器会自动生成的成员函数称为默认成员函数。一个类&#xff0c;我们不写的情况下编译器会默认生成以下6个默认成员函数&#xff0c;需要注意的是这6个中最重要的是前4个&#xff0c;最后两个取地址重载不重…

基于SSM框架的线上甜品销售系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所以对于信息的宣传和管理就很关键。因此网上销售信息的…

3.25学习总结java 接口+内部类

JDK8以后新增的方法 可以将接口中静态方法和抽象方法中重复的部分抽离出来&#xff0c;作为私有方法&#xff0c;用去private修饰&#xff0c;此方法只为接口提供服务&#xff0c;不需要外界访问。 接口的应用 接口代表规则&#xff0c;是行为的抽象&#xff0c;想让哪个类拥有…

Linux--环境变量

ok&#xff0c;今天我们来学习Linux中的环境变量、地址空间、虚拟内存 环境变量 基本概念 环境变量(environmentvariables)⼀般是指在操作系统中⽤来指定操作系统运⾏环境的⼀些参数如&#xff1a;我们在编写C/C代码的时候&#xff0c;在链接的时候&#xff0c;从来不知道我…

Java 集合 List、Set、Map 区别与应用

一、核心特性对比 二、底层实现与典型差异 ‌List‌ ‌ArrayList‌&#xff1a;动态数组结构&#xff0c;随机访问快&#xff08;O(1)&#xff09;&#xff0c;中间插入/删除效率低&#xff08;O(n)&#xff09;‌‌LinkedList‌&#xff1a;双向链表结构&#xff0c;头尾操作…

基于 arco 的 React 和 Vue 设计系统

arco 是字节跳动出品的企业级设计系统&#xff0c;支持React 和 Vue。 安装模板工具 npm i -g arco-cli创建项目目录 cd someDir arco init hello-arco-pro? 请选择你希望使用的技术栈React❯ Vue? 请选择一个分类业务组件组件库Lerna Menorepo 项目❯ Arco Pro 项目看到以…

JVM-GC(G1)实践—GC异常定位、参数调整、GC更换

前言 如SpringBoot官方介绍所说的那样&#xff0c;从SpringBoot3.x开始支持的最低JDK版本为&#xff1a;JDK17&#xff08;官方推荐使用BellSoft Liberica JDK&#xff09;&#xff0c;其对应的GC为G1。 本文笔者从应用实践的角度出发&#xff0c;记录一些关于GC的一些实践总…

吾爱出品,文件分类助手,高效管理您的 PC 资源库

在日常使用电脑的过程中&#xff0c;文件杂乱无章常常让人感到困扰。无论是桌面堆积如山的快捷方式&#xff0c;还是硬盘中混乱的音频、视频、文档等资源&#xff0c;都急需一种高效的整理方法。文件分类助手应运而生&#xff0c;它是一款文件管理工具&#xff0c;能够快速、智…

修改Flutter工程中Android项目minSdkVersion配置

Flutter项目开发过程中&#xff0c;根据模板自动生成.android项目&#xff0c;其中app>build.gradle中minSdkVersion的值是19&#xff0c;但是依赖了一个三方库&#xff0c;它的Android sdk 最小版本只支持到21&#xff0c;运行报错如下&#xff1a; 我们可以手动修改.andro…