请问: Python中是否有方式可以像前端的TSLint一样进行代码的自动风格格式检查?

请问:
Python中是否有方式可以像前端的TSLint一样进行代码的自动风格格式检查?

我知道一个库:autopep8

我只有看到单个文件的检验:

autopep8 --in-place test_search.py

但是如何做到类似Python项目的配置文件中配置,然后自动检查呢?

阅读 9.6k
avatarAI BotBETA

是的,Python 中有多种方式可以进行代码的自动风格格式检查,类似于前端的 TSLint。

除了你已经知道的 autopep8,另一个非常流行的工具是 flake8,它结合了 pyflakespycodestyle(以前叫 pep8)和 Ned Batcheldermccabe 脚本,用于检查 Python 代码风格是否符合 PEP 8 标准,并且还能检测一些编程错误。

要在 Python 项目中配置自动代码风格检查,你可以使用以下步骤:

  1. 安装 flake8

    pip install flake8
  2. 在项目根目录下创建配置文件
    你可以创建一个名为 .flake8setup.cfg 的配置文件,并在其中定义你的检查规则。例如,一个简单的 .flake8 配置文件可能看起来像这样:

    [flake8]
    max-line-length = 120
    ignore = E501,W503

    这里,max-line-length 设置了代码行的最大长度,ignore 列出了你想忽略的错误代码。

  3. 在项目中运行 flake8
    你可以通过命令行在项目根目录下运行 flake8 来检查整个项目的代码风格。例如:

    flake8 .

    这个命令会递归地检查当前目录及其子目录下的所有 Python 文件。

  4. 集成到 CI/CD 管道
    为了确保代码风格的一致性和质量,你可以将 flake8 集成到你的持续集成/持续部署(CI/CD)管道中。这样,每次代码提交或合并时,都会自动运行 flake8 检查。
  5. 使用编辑器插件
    许多流行的代码编辑器(如 VS Code、PyCharm)都有 flake8 的插件,可以在你编写代码时实时显示风格问题。

通过以上步骤,你就可以在 Python 项目中配置和使用类似 TSLint 的代码风格检查工具了。

1 个回答

现在推荐用 ruff,更快更方便,全局安装一下它就行。

pip install ruff

vscode开发python三件套:

  • mypy
  • pylance
  • ruff

前两个做参数和变量的静态类型检查,ruff用于代码格式化等等各种规则配置。

然后比如我用 poetry 以及 pyproject.yaml 来作为我的python配置文件的话,内容如下:

[tool.poetry]
...

[tool.poetry.dependencies]
...

[tool.poetry.group.dev.dependencies]
pytest = "^8.2.2"
pytest-asyncio = "^0.23.8"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

######################### 以下配置参考 #########################
[tool.ruff]
line-length = 120
ignore = ["E501", "E722"]

# output to requirements.txt
# poetry export -f requirements.txt --without-hashes --without-urls -o requirements.dev.txt

[tool.mypy]
ignore_missing_imports = true
disable_error_code = ["import-untyped", "arg-type", "attr-defined", "type-arg", "valid-type", "union-attr", "call-arg", "annotation-unchecked"]

[[tool.mypy.overrides]]
module = "*"
disable_error_code = ["import-untyped", "arg-type", "attr-defined", "type-arg", "valid-type", "union-attr", "call-arg", "annotation-unchecked"]
ignore_missing_imports = true

# https://github.com/microsoft/pyright/blob/main/docs/configuration.md
[tool.pyright]
include = ["src"]
exclude = ["**/__pycache__", ".venv"]
reportMissingImports = true

...

然后vscode的settings配置:

{
    "[python]": {
        "editor.formatOnType": true,
        "editor.defaultFormatter": "charliermarsh.ruff",
        "editor.codeActionsOnSave": {
            "source.organizeImports.ruff": "explicit",
            "source.fixAll.ruff": "explicit"
        },
        "editor.formatOnSave": true
    },
    "editor.codeActionsOnSave": {

        "source.organizeImports.ruff": "explicit",
        "source.fixAll.ruff": "explicit"
    },
}

之后,每一个python文件在你保存的时候 ruff 会自动格式化,mypy 类型检查,很方便。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏