Python 风格指南#

提交前检查#

在持续集成期间会执行一些代码质量检查。在提交拉取请求之前,最简单的方法是在本地检查这些检查是否通过,方法是使用 pre-commit

设置步骤如下(在虚拟环境中运行这些命令):

  1. 安装:

    pip install pre-commit
    
  2. 启用:

    pre-commit install
    

现在,每当你暂存一些文件,当你运行 git commit -m "<一些描述性信息>" 时,pre-commit 将运行在 .pre-commit-config.yaml 中定义的检查,如果其中任何一个失败,它将阻止你的提交。如果有任何钩子失败,你应该修复它(如果需要),再次运行 git add <文件>,然后重新运行 git commit -m "<一些描述性信息>"

你可以使用 --no-verify 跳过 pre-commit,例如:

git commit -m "wip lol" --no-verify

要跳过某个特定的钩子,你可以设置 SKIP 环境变量。例如(在Linux上):

SKIP=pyupgrade git commit -m "<descriptive message>"

你可以手动运行所有 pre-commit 钩子在所有文件上。

pre-commit run --all-files

或者,如果你只想在文件子集上手动运行它们,

pre-commit run --files <file_1> <file_2> ... <file_n>

陷阱与故障排除#

预提交运行在暂存文件上

如果你有一些 git 更改已暂存而其他未暂存,pre-commit 将仅在已暂存的文件上运行。

预提交反复抱怨相同的格式更改

检查未暂存的更改(参见前一点)。

environment-dev.yml 文件中的空白更改

在Windows上,预提交钩子中存在一些错误,可能导致某些环境YAML文件发生变化。在此问题得到上游修复之前,您应__忽略这些更改__。要实际进行提交,请使用pre-commit uninstall停用自动化的pre-commit,并确保使用pre-commit run --all手动运行它。

mypy 步骤中的失败

我们正在使用 mypy 进行静态类型检查,以持续提高 PyMC 代码库的可靠性和类型安全性。然而,有许多文件存在未解决的类型问题,这就是为什么我们允许一些文件未通过 mypy 检查。

如果你看到 mypy 步骤在抱怨,很可能你处于以下两种情况之一:

  • 😕 您的更改在原本没有类型问题的文件中引入了类型问题。

  • 🥳 你的更改修复了类型问题。

无论如何,阅读 mypy 钩子的日志输出,因为它包含了如何继续操作的说明。

你也可以通过 python scripts/run_mypy.py [--verbose] 手动运行 mypy 检查。