当前位置: 首页 > 知识库问答 >
问题:

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

卫飞
2024-12-05

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

我知道一个库:autopep8

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

autopep8 --in-place test_search.py

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

共有2个答案

凌俊语
2024-12-05

现在推荐用 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 类型检查,很方便。

史烨
2024-12-05

是的,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 的代码风格检查工具了。

 类似资料:
  • 问题内容: 我有一些格式不一致的现有代码-有时两个空格用于缩进,有时四个空格,以此类推。代码本身是正确的,并且经过了严格的测试,但是格式却很糟糕。 在线上是否有一个地方,我可以简单地粘贴一段Python代码并自动为我缩进/设置格式?或者,是否可以执行类似的操作,并用格式化的版本覆盖每个文件? 问题答案: 编辑:如今,我建议使用autopep8,因为它不仅可以纠正缩进问题,而且(根据您的判断)可以使

  • 问题内容: Python教程说:“在运算符周围和逗号后使用空格,但不要直接在括号结构内使用:a = f(1,2)+ g(3,4)”。“不直接在包围结构内”到底是什么意思? 问题答案: 这可能来自PEP 8-Python代码样式指南 。具体来说,请参见“表达式和语句中的空白”部分。 从该部分:

  • 问题内容: 在python中,我想检查输入字符串是否为“ HH:MM”,例如01:16或23:16或24:00。结果为真或假。 如何通过使用正则表达式来实现? 问题答案: 您可以不使用正则表达式来实现:

  • 问题内容: 现在我有: 除非我要转换没有微秒的字符串,否则此方法效果很好。如何指定微秒是可选的(如果它们不在字符串中,则应将其视为0)? 问题答案: 您可以使用一个块:

  • 问题内容: 我想解析一个日期,它可以是几种我事先知道的格式。如果无法解析,则返回nil。在红宝石中,我确实这样: 这是简洁而有效的。如何在Python中做同样的事情? 问题答案: 您可以使用catch来尝试使用不匹配的格式时发生的情况。如@Bakuriu所述,您可以在找到匹配项时停止迭代以避免不必要的解析,然后在未定义因为未找到匹配格式而定义行为时: 您可以使用catch来尝试使用不匹配的格式时发

  • 我想把时间放进牢房。我需要它是独立的,没有年,月,日数据日期时间的附件 当我尝试以h:mm AM/PM格式编写字符串15:55:00时,它会在excel工作表上显示为15:55:00,直到我选择单元格并按enter键,所以这似乎不是一种有效的方法。 传递日期时间是有效的,但我不想在我的手机里有日期信息,只想正确格式化时间。 我目前的代码如下:

  • 有没有办法在Intellij中创建自定义的代码格式顺序?更具体地说,当一起按Option+Command+L时,我试图更改默认格式,并按类型格式化导入。

  • 本文向大家介绍Python可视化mhd格式和raw格式的医学图像并保存的方法,包括了Python可视化mhd格式和raw格式的医学图像并保存的方法的使用技巧和注意事项,需要的朋友参考一下 mhd格式的文件里面包含的是raw图像的一些头信息,比如图片大小,拍摄日期等等,那么如何可视化图像呢? 这里path是mhd文件的路径,并且在该路径下需要有相应的raw文件 这里展示一下我的mdk文件和保存的pn