• 规范的企业开发常需要的配置文件-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 布尔值,只显示错误和警告的数量,而不显示具体的错误信息

    以下给一个规范实例:

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

    pyproject

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

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

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

    比如以下例子:

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

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

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

    1. [tool.black]
    2. line-length = 120
    3. include = '\.pyi?$'
    4. exclude = '''
    5. /(
    6. \.git
    7. | \.hg
    8. | \.mypy_cache
    9. | \.tox
    10. | \.venv
    11. | _build
    12. | buck-out
    13. | build
    14. | dist
    15. )/
    16. '''

    甚至可能写成如此,

    • include = '\.pyi?$':设置一个正则表达式,用于匹配应该被 Black 格式化的文件。在这个例子中,它将匹配以 .py 或 .pyi 结尾的文件。.py 文件是常规的 Python 代码文件,而 .pyi 文件是用于类型注解的 Python 存根文件

    • exclude = '''...''':设置一个正则表达式,用于匹配不应该被 Black 格式化的文件和目录。在这个例子中,它将排除 .git.hg.mypy_cache.tox.venv_buildbuck-outbuild 和 dist 等目录。这些目录通常包含版本控制、缓存、虚拟环境或构建产物,不需要被格式化。

    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 来定制交互式提示信息
    1. module.exports = {
    2. extends: ['@commitlint/config-conventional'],
    3. rules: {
    4. 'header-max-length': [2, 'always', 72],
    5. 'type-enum': [
    6. 2,
    7. 'always',
    8. ['feature', 'bugfix', 'minor', 'style', 'refactor', 'perf', 'test', 'build', 'ci', 'merge'],
    9. ],
    10. 'scope-empty': [2, 'never'],
    11. 'scope-case': [2, 'always', 'lower-case'],
    12. 'subject-case': [2, 'never', ['sentence-case', 'start-case', 'pascal-case', 'upper-case']],
    13. 'subject-empty': [2, 'never'],
    14. 'subject-full-stop': [2, 'never', '.'],
    15. 'body-leading-blank': [2, 'always'],
    16. 'footer-leading-blank': [1, 'always'],
    17. },
    18. ignores: [
    19. (commit) => commit === '',
    20. (message) => message.includes('Merge'),
    21. (message) => message.includes('merge')
    22. ],
    23. };

    .pre-commit-config.yaml

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

    示例文件:

    1. default_stages: [commit]
    2. repos:
    3. - repo: https://github.com/pre-commit/pre-commit-hooks
    4. rev: v4.1.0
    5. hooks:
    6. - id: trailing-whitespace
    7. - id: end-of-file-fixer
    8. - id: check-ast
    9. - id: debug-statements
    10. - repo: https://github.com/ambv/black
    11. rev: 21.12b0
    12. hooks:
    13. - id: black
    14. language_version: python3.8
    15. - repo: https://github.com/pycqa/isort
    16. rev: 5.10.1
    17. hooks:
    18. - id: isort
    19. - repo: https://github.com/pycqa/flake8
    20. rev: 4.0.1
    21. hooks:
    22. - id: flake8
    23. - repo: https://github.com/pre-commit/mirrors-mypy
    24. rev: v0.910
    25. hooks:
    26. - id: mypy
    27. additional_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:此文件用于配置 Flake8Flake8 工具,该工具是一个 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 文件中定义钩子,您可以确保在每次提交代码之前都会自动执行这些检查任务。

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

  • 相关阅读:
    UDS知识整理(六):通讯控制——0x28服务
    全面理解元宇宙-Web3.0具象表现形式
    TTS | 轻量级VITS2的项目实现以及API设置
    ib中文文学课如何学习重点?
    MVVM中wpf设置控件是否可见
    【漏洞复现-solr-命令执行】vulfocus/solr-cve_2019_17558
    期货穿透式监管实质(期货看穿式监管)
    使用flask_login出错:AttributeError: type object ‘User‘ has no attribute ‘is_active‘
    同城信息服务源码 本地生活服务小程序源码
    【跟学C++】C++STL标准模板库——算法详细整理(中)(Study18)
  • 原文地址:https://blog.csdn.net/lxd_max/article/details/132805702