规范的企业开发常需要的配置文件-Python开发技巧XI

目录

Flake8

pyproject

commitlint.config

.pre-commit-config.yaml

触发时刻

意义


Flake8

Flake8 是一个用于检查 Python 代码风格和质量的工具。

对应.flake8文件

可以检查代码中的语法错误、风格问题和潜在的 bug。

(1)规范代码风格;

(2)排除特定文件和目录,避免检查第三方库、自动生成的代码或其他不需要检查的文件很有用。

(3)选择和忽略错误和警告

(4)甚至还能启用插件

ignore忽略指定的错误或警告。在这里,C901 表示函数过于复杂,W503 表示二元操作符前有换行符,F405 表示可能未定义变量或从星号导入定义,E203 表示切片冒号前后应该没有空格。
exclude排除指定的文件或目录不进行检查。在这里,配置了一些常见的排除项,如 migrations 目录、.pyc 文件、.git 目录等等。
max-line-length数值,限制每行代码的最大长度的字符数
max-complexity数值,限制函数的最大复杂度为多少。复杂度是通过计算函数中的各种语句、条件和循环来确定的。
format 指定输出格式
show_source 布尔值,显示错误所在的源代码。
statistics 布尔值,显示统计信息,包括代码行数、错误数量等等
count 布尔值,只显示错误和警告的数量,而不显示具体的错误信息

以下给一个规范实例:

[flake8]
# 设置最大行长度
max-line-length = 120# 排除特定文件或目录
exclude =.git,__pycache__,migrations,venv,*/node_modules/*,*migrations*,local_settings.py,# 选择要启用的错误和警告
select =E,  # 所有错误(E)W,  # 所有警告(W)F,  # pyflakes 检测到的错误(F)C   # McCabe 复杂度警告(C)# 忽略特定错误和警告
ignore =W503,  # 操作符前换行E203,  # 空格与括号内的冒号F405   # 表示可能未定义变量或从星号导入定义# 每行代码的最大长度的字符数
max-line-length = 120# 限制函数的最大复杂度为多少
max-complexity = 12# 显示统计信息,包括代码行数、错误数量等等
statistics = True

pyproject

pyproject.toml 是一个 Python 项目配置文件,用于存储项目的构建和依赖管理信息。

会作用在:
(1)代码格式化:通过为 Black 和 iSort 设置特定的配置选项,可确保按照一定编码风格和项目需求对代码进行格式化;

(2)自动化:在持续集成(CI)和持续部署(CD)流程中,自动化代码格式化和检查可以帮助您确保代码库中的代码始终保持一致的风格。

比如以下例子:

  • 使用 Poetry 作为依赖管理工具,为项目指定了名称、版本、描述、作者和许可证信息。
  • 定义了项目的运行时依赖(如 python 和 requests)及开发时依赖(如 pytestflake8black 和 isort)。
  • 指定了构建系统的要求和后端(这里使用了 Poetry)。
  • 为 Black 和 iSort 配置了代码格式化规则。
[tool.poetry]
name = "my_project"
version = "0.1.0"
description = "A simple Python project"
authors = ["Your Name <your.email@example.com>"]
license = "MIT"[tool.poetry.dependencies]
python = "^3.8"
requests = "^2.25.1"[tool.poetry.dev-dependencies]
pytest = "^6.2.2"
flake8 = "^3.9.0"
black = "^20.8b1"
isort = "^5.7.0"[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"[tool.black]
line-length = 120[tool.isort]
profile = "black"
multi_line_output = 3

这里可能你会有问题,“.flake8中配置了max-line-length = 120,那么pyproject.toml中是否有必要配置[tool.black] line-length = 120”?

有的。确保 Black 和 Flake8 使用相同的最大行长度设置,从而避免在格式化代码和检查代码时产生冲突。前者是代码格式化工具,后者是代码检查工具。

commitlint.config

commitlint.config.js 用于配置 Commitlint 工具,用于检查 Git 提交消息是否遵循特定的约定

  • extends:指定了要继承的配置文件,这里使用了 '@commitlint/config-conventional' 这个包的配置文件作为基础。
  • formatter:指定了用于格式化输出的包,这里使用了 '@commitlint/format' 这个包。
  • rules:定义了自定义的规则,其中 'type-enum' 规则指定了允许的提交类型,这里定义了一些常见的类型。
  • ignores:定义了忽略某些提交消息的规则,如以下示例空消息、包含 'Merge' 或 'merge' 的消息都会被忽略。
  • defaultIgnores:指定是否使用默认的忽略规则。
  • helpUrl:指定了在提交消息不符合规范时显示的自定义帮助链接。
  • prompt:定义了自定义提示配置,可通过设置 messages 和 questions 来定制交互式提示信息
module.exports = {extends: ['@commitlint/config-conventional'],rules: {'header-max-length': [2, 'always', 72],'type-enum': [2,'always',['feature', 'bugfix', 'minor', 'style', 'refactor', 'perf', 'test', 'build', 'ci', 'merge'],],'scope-empty': [2, 'never'],'scope-case': [2, 'always', 'lower-case'],'subject-case': [2, 'never', ['sentence-case', 'start-case', 'pascal-case', 'upper-case']],'subject-empty': [2, 'never'],'subject-full-stop': [2, 'never', '.'],'body-leading-blank': [2, 'always'],'footer-leading-blank': [1, 'always'],},  ignores: [(commit) => commit === '',(message) => message.includes('Merge'),(message) => message.includes('merge')],
};

.pre-commit-config.yaml

.pre-commit-config.yaml 文件用于配置 pre-commit 工具。pre-commit 是一个用于管理 Git 预提交钩子的工具,可以在每次提交代码之前自动执行一系列任务,例如代码格式化、语法检查和测试。这有助于确保代码库中的代码保持一致且高质量

示例文件:

default_stages: [commit]
repos:- repo: https://github.com/pre-commit/pre-commit-hooksrev: v4.1.0hooks:- id: trailing-whitespace- id: end-of-file-fixer- id: check-ast- id: debug-statements- repo: https://github.com/ambv/blackrev: 21.12b0hooks:- id: blacklanguage_version: python3.8- repo: https://github.com/pycqa/isortrev: 5.10.1hooks:- id: isort- repo: https://github.com/pycqa/flake8rev: 4.0.1hooks:- id: flake8- repo: https://github.com/pre-commit/mirrors-mypyrev: v0.910hooks:- id: mypyadditional_dependencies: [types-requests]

注:
        (1)Git 中,钩子(hooks)是在特定事件发生时自动执行的脚本,可用来自动执行一些任务,例如在提交代码之前进行代码格式化、语法检查、测试等。

       

触发时刻

代码质量和团队协作工具相关联。

  1. .flake8:与 Flake8 工具相关。当在命令行中手动运行 flake8 命令或在持续集成(CI)流程中执行 Flake8 时,.flake8 配置文件中的设置将被应用。Flake8 根据这些设置检查代码中的语法错误、风格问题和潜在的 bug。

  2. pyproject.toml:与诸如 Black 和 iSort 等代码格式化工具相关。当在命令行中手动运行这些工具(例如,black . 或 isort .)或在持续集成(CI)流程中执行它们时,pyproject.toml 配置文件中的设置将被应用。这些工具会根据这些设置对代码进行格式化。

  3. commitlint.config.js:与 Commitlint 工具相关。当执行 git commit 命令时,如果您已将 Commitlint 配置为 Git 钩子(例如,使用 Husky),commitlint.config.js 配置文件中的设置将被应用。Commitlint 会根据这些设置检查提交消息是否遵循特定的约定。

  4. .pre-commit-config.yaml:与 pre-commit 工具相关。当您执行 git commit 命令时,如果您已安装了 pre-commit 钩子(通过运行 pre-commit install),.pre-commit-config.yaml 配置文件中定义的钩子将被触发。这些钩子会在提交代码之前自动执行一系列任务,例如代码格式化、语法检查和测试。

        这些配置文件中的设置常在手动运行相关工具、执行 git commit 命令时触发 Git 钩子或在持续集成(CI)流程中执行这些工具时被应用。助于确保代码质量、一致性和可维护性。

意义

        在 Python 项目中,.flake8pyproject.tomlcommitlint.config.js 和 .pre-commit-config.yaml 文件都是用于配置不同工具的配置文件。这些工具可以帮助您确保代码质量、一致性和团队协作效率。以下是这些文件及其对应工具的简要概述:

  1. .flake8:此文件用于配置 FF 工具,该工具是一个 Python 代码检查工具,用于检查代码中的语法错误、风格问题和潜在的 bug。通过在 .flake8 文件中定义规则,您可以定制 Flake8 的行为,使其符合您的项目需求和编码风格。

  2. pyproject.toml:此文件是一个通用的 Python 项目配置文件,用于存储项目的构建和依赖管理信息。此文件还可用于配置诸如 Black 和 iSort 等代码格式化工具。通过在 pyproject.toml 文件中定义规则,您可以确保这些工具按照您的编码风格和项目需求对代码进行格式化。

  3. commitlint.config.js:此文件用于配置 Commitlint 工具,该工具用于检查 Git 提交消息是否遵循特定的约定。通过在 commitlint.config.js 文件中定义规则,您可以确保提交消息的一致性和可读性,从而提高团队协作效率。

  4. .pre-commit-config.yaml:此文件用于配置 pre-commit 工具,该工具用于管理 Git 预提交钩子。预提交钩子是在执行 git commit 命令之前触发的钩子,可以在每次提交代码之前自动执行一系列任务,例如代码格式化、语法检查和测试。通过在 .pre-commit-config.yaml 文件中定义钩子,您可以确保在每次提交代码之前都会自动执行这些检查任务。

        这些配置文件之间的关系在于它们都是用于配置不同的代码质量和团队协作工具。虽然配置的工具各不相同,但共同目的是确保项目的代码质量、一致性和可维护性。

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

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

相关文章

【Leetcode-面试经典150题-day22】

目录 97. 交错字符串 97. 交错字符串 题意&#xff1a; 给定三个字符串 s1、s2、s3&#xff0c;请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下&#xff0c;其中每个字符串都会被分割成若干 非空 子字符串&#xff1a; s s1 s2 …

【Java基础篇 | 面向对象】—— 继承

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 本专栏旨在分享学习JavaSE的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 继承允许一个类继承另一个…

TCP协议

目录 一、TCP协议段格式 二、TCP原理 2.1 确认应答机制 2.2 超时重传机制 2.3 连接管理机制&#xff08;重点&#xff09; 2.4 滑动窗口 2.5 流量控制 2.6 拥塞控制 2.7 延迟应答 2.8 捎带应答 2.9 面向字节流&#xff08;粘包问题&#xff09; 2.10 TCP异常情况&#xff08;心…

Python网络爬虫库:轻松提取网页数据的利器

网络爬虫是一种自动化程序&#xff0c;它可以通过访问网页并提取所需的数据。Python是一种流行的编程语言&#xff0c;拥有许多强大的网络爬虫库。在本文中&#xff0c;我们将介绍几个常用的Python网络爬虫库以及它们的使用。 Requests库 Requests是一个简单而优雅的HTTP库&…

cv.dnn.NMSBoxes(bbox, confs, self.confThreshold, self.nmsThreshold)

indices cv.dnn.NMSBoxes(bbox, confs, self.confThreshold, self.nmsThreshold)这行代码是调用 OpenCV 的 cv.dnn.NMSBoxes 函数来执行非最大抑制&#xff08;Non-Maximum Suppression, NMS&#xff09;算法&#xff0c;这是一个常用的后处理步骤&#xff0c;用于消除多余的重…

北京互联网营销服务商浩希数字科技申请1350万美元纳斯达克IPO上市

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于北京的互联网营销服务商浩希数字科技&#xff08;Haoxi Health Technology Limited &#xff09;近期已向美国证券交易委员会&#xff08;SEC&#xff09;提交招股书&#xff0c;申请在纳斯…

华为在高端智能手机市场再次撕开了一道深深的口子

智能手机市场趋于饱和&#xff0c;增长变得越来越难&#xff0c;智能手机厂商从被动卷走向了主动卷。 8月29日&#xff0c;华为宣布推出“HUAWEI Mate 60 Pro先锋计划”&#xff0c;并于当天中午在官方商城、部分线下门店上线销售新机Mate 60 Pro&#xff0c;它是全球首款支持卫…

软件测试/测试开发丨Web自动化 PageObject设计模式

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27167 一、page object 模式简介 马丁福勒个人博客 selenium 官网 1.1、传统 UI 自动化的问题 无法适应 UI 频繁变化无法清晰表达业务用例场景大量的样…

Goland2023版新UI的debug模式调试框按钮功能说明

一、背景 Jetbrains家的IDE的UI基本都是一样的&#xff0c;debug模式的调试框按钮排列也是一致的&#xff0c;但是在我使用Goland2023版的新UI时&#xff0c;发现调试框的按钮变化还是很大的&#xff0c;有一些按钮被收起来了&#xff0c;如果看之前的博客会发现有一些文中的旧…

stm32f1xx单片机拦截中断源代码

这个是实现后的效果&#xff0c;可以看到已经没有中断的效果了 这个是拦截前的效果可以看到电平是在变化的 实现原理非常简单&#xff1a;一句话搞定&#xff1a; if(TIM2->CNTTIM2->ARR-5)TIM2->CNT-5; 以下是完整的代码&#xff1a;是用来补充说明和筹字数的 /* …

图解 LeetCode 算法汇总——回溯

本文首发公众号&#xff1a;小码A梦 回溯算法是一种常见的算法&#xff0c;常见用于解决排列组合、排列问题、搜索问题等算法&#xff0c;在一个搜索空间中寻找所有的可能的解。通过向分支不断尝试获取所有的解&#xff0c;然后找到合适的解&#xff0c;找完一个分支后再往回搜…

GNSS融合策略

文章目录 一、背景二、松耦合融合策略1. 信息有效性判断2. 坐标系对齐3. 观测方程a.杆臂补偿b.速度融合c.位置融合1) 置信度设置 d. 航向yaw融合 4.观测性分析1&#xff09;状态表示在VIO坐标系下的观测性分析2&#xff09;状态表示在GPS ENU坐标系下的观测性分析 三、紧耦合融…

Bytebase 和 GitLab 签署 Technology Partner 技术合作伙伴协议

Bytebase 和 GitLab 签署技术合作伙伴协议&#xff0c;携手为开发者提供流畅的数据库协作开发和管理体验。 GitLab 是世界领先的开源 AI 驱动 DevSecOps 平台&#xff0c;旨在帮助开发者团队更好协作、更高效交付软件。Bytebase 是一款为 DevOps 团队准备的数据库 CI/CD 工具&a…

Go语言网络编程(socket编程)TCP

1、TCP编程 1.1.1 Go语言实现TCP通信 TCP协议 TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议&#xff0c;是一种面向连接&#xff08;连接导向&#xff09;的、可靠的、基于字节流的传输层&#xff08;Transport layer&#xff09;通信协…

drone的简单使用

&#xff08;一&#xff09;简介 Drone 是一个基于Docker容器技术的可扩展的持续集成引擎&#xff0c;用于自动化测试、构建、发布。每个构建都在一个临时的Docker容器中执行&#xff0c;使开发人员能够完全控制其构建环境并保证隔离。开发者只需在项目中包含 .drone.yml文件&…

数据结构和算法(2):向量

抽象数据类型 数组到向量 C/C 中&#xff0c;数组A[]中的元素与[0,n)内的编号一一对应&#xff0c;A[0],A[1],...,A[n-1]&#xff1b;反之&#xff0c;每个元素均由&#xff08;非负&#xff09;编号唯一指代&#xff0c;并可直接访问A[i] 的物理地址 Ai s&#xff0c;s 为单…

docker系列(2) - 常用命令篇

文章目录 2. docker常用命令2.1 参数说明(tomcat案例)2.2 基本命令2.3 高级命令2.4 其他 2. docker常用命令 2.1 参数说明(tomcat案例) 注意如果分成多行&#xff0c;\后面不能有空格 # 拉取运行 docker run \ -d \ -p 8080:8080 \ --privilegedtrue \ --restartalways \ -m…

系统架构设计师(第二版)学习笔记----嵌入式系统及软件

【原文链接】系统架构设计师&#xff08;第二版&#xff09;学习笔记----嵌入式系统及软件 文章目录 一、嵌入式系统1.1 嵌入式系统的组成1.2 嵌入式系统的特点1.3 嵌入式系统的分类 二、嵌入式软件2.1 嵌入式系统软件分层2.2 嵌入式软件的主要特点 三、安全攸关软件的安全性设…

自己的碎碎念集合

自己的碎碎念集合 2023-09-11 C语言定义 `int *p,q;` p, q类型是否一样2023-09-07 c++叠加三目运算符闰年计算法2023-08-13 一个小题目 A+B problem一、问题及解答关碍总结2023-07-26 C的2至36进制转换函数一、itoa()函数的示例代码总结2023-07-19 平面坐标下判断三角形以及输出…

十八、MySQL添加外键?

1、外键 外键是用来让两张表的数据之间建立联系&#xff0c;从而保证数据的一致性和完整性。 注意&#xff0c;父表被关联的字段类型&#xff0c;必须和子表被关联的字段类型一致。 2、实际操作 &#xff08;1&#xff09;初始化两张表格&#xff1a; 子表&#xff1a; 父…