Ruff v0.7.0 现已发布!您可以通过 PyPI 或您选择的包管理器进行安装。

uv pip install --upgrade ruff

温馨提示:Ruff 是一款极其快速的 Python 代码检查器和格式化工具,采用 Rust 编写。 Ruff 可以替代 Black、Flake8(以及数十个插件)、isort、pydocstyle、pyupgrade 等工具,其执行速度比任何单个工具都要快数十甚至数百倍。


迁移至 v0.7

与大多数 Ruff 次要版本一样,本次发布包含的重大变更很少:我们的大多数用户应该能够升级到最新版本的 Ruff,而无需对其代码或配置进行任何重大修改。

话虽如此,升级时仍需注意以下几点:

  • 部分用户将体验到规则 PT001PT023(在我们 flake8-pytest 类别中)的新默认设置。这是我们在 Ruff v0.6 中尝试进行的更改,但由于我们的错误,并非所有用户都看到了行为上的变化。请参阅下文了解更多详情。
  • useless-try-except 规则(在我们 tryceratops 类别中)已从 TRY302 重新编码为 TRY203。这确保了 Ruff 的代码与 tryceratops 代码检查器中的相同规则保持一致。
  • lint.allow-unused-imports 设置已被移除。请改用 lint.pyflakes.allow-unused-imports
  • open-file-with-context-handler (SIM115) 是一条用于查找未在上下文管理器中打开的文件的规则,现在具有更广泛的行为。以前它只查找使用内置 open() 函数或 pathlib.Path(...).open() 打开的文件,现在它可以使用各种其他标准库函数和类来检测文件是否被打开。此改进功能已向预览模式用户提供数月,现已提升为稳定版。

flake8-pytest-style 规则的默认行为已更改

(这次是认真的。)

在 Ruff v0.6 中,我们尝试更改 pytest-fixture-incorrect-parentheses-stylepytest-incorrect-mark-parentheses-style(分别为 PT001PT023)的默认行为。对于我们的许多用户而言,Ruff v0.6 中的默认行为确实发生了变化。

然而,不幸的是,一些用户仍然在使用旧的默认设置。用户是否会收到更新的行为,具体取决于其 Ruff 配置文件(pyproject.tomlruff.toml 或类似文件)中配置选项的指定(或未指定)情况。

现在这个 bug 已经修复,这得益于 Alexey Preobrazhenskiy 的贡献:在 Ruff v0.7 中,所有用户都将体验到新的默认行为。

回顾一下在 Ruff v0.6 中仅部分实现的更改:之前,PT001 默认会将 @pytest.fixture 装饰器更改为 @pytest.fixture(),而 PT023 会将 @pytest.mark.foo 装饰器更改为 @pytest.mark.foo()

现在它们都将默认移除括号,而不是添加它们。这意味着这些规则现在更符合官方 pytest 项目提出的样式建议。

这两条规则都可配置。要恢复 Ruff 以前的默认行为,请在 Ruff 配置文件中使用 lint.flake8-pytest-style.mark-parentheseslint.flake8-pytest-style.fixture-parentheses 设置。例如,在 pyproject.toml 文件中:

[tool.ruff.lint.flake8-pytest-style]
fixture-parentheses = true
mark-parentheses = true

这些规则还都附带安全修复,因此您可以通过运行 ruff check . --fix --select=PT001 --select=PT023 轻松修复此更改导致的任何新的违规行为。


GitHub 上查看完整的更新日志。

了解更多关于 Astral — Ruff 背后的公司。