提升你的Python编程风格与Ruff
改善你的Python编程风格和Ruff技巧
什么是Ruff
Ruff是一个用Rust编写的极快的Python代码检查器和格式化器,旨在替代和改进现有的工具,如Flake8、Black和isort。它提供了10-100倍更快的性能,同时通过700多个内置规则和流行插件的重新实现,保持了功能的一致性。
Ruff支持与3.12版本兼容以及`pyproject.toml`。它还提供了自动修复支持、缓存和编辑器集成。Ruff在像Pandas、FastAPI等重要开源项目中被广泛使用。通过将速度、功能和易用性结合起来,Ruff将代码检查、格式化和自动修复集成到一个统一的工具中,比现有选项的速度快了数个数量级。
开始使用Ruff
我们可以通过使用PIP简单地安装`ruff`。
pip install ruff
为了测试运行Ruff的方便和快捷性,我们可以使用DagHub仓库kingabzpro/Yoga-Pose-Classification。您可以克隆它,也可以使用您自己的项目进行格式化。
首先,我们将对我们的项目运行检查器。您也可以通过将“.”替换为文件位置,在单个文件上运行检查器。
ruff check .
Ruff找到了9个错误和1个可修复的错误。要修复该错误,我们将使用–fix标志。
ruff check --fix .
如您所见,它修复了1个可修复的错误。 为了格式化项目,我们将使用`ruff format`命令。
$ ruff format .>>> 重新格式化了3个文件
Ruff代码检查器和格式化器对代码进行了许多更改。那么,为什么我们需要这些工具呢?答案很简单 – 它们有助于强制执行编码标准和约定。因此,您和您的团队都可以专注于代码的重要方面。此外,它们有助于提高我们代码的质量、可维护性和安全性。
对Jupyter Notebooks进行代码检查和格式化
要在项目中使用Ruff对Jupyter Notebooks进行处理,您必须创建`ruff.toml`文件并添加以下代码:
extend-include = ["*.ipynb"]
您也可以在`pyproject.toml`文件中执行同样的操作。
之后,重新运行命令,以查看它对Jupyter笔记本文件进行的更改。
2个文件被重新格式化,我们还有2个笔记本文件。
$ ruff format .>>> 重新格式化了2个文件,保留了3个文件不变
我们也通过再次运行`check`命令来修复那些文件中的问题。
$ ruff check --fix .>>> 发现了51个错误(6个已修复,45个仍存在)。
最终结果令人惊叹。它在不破坏代码的情况下做出了所有必要的更改。
Ruff配置
通过编辑`ruff.toml`文件调整linter和formatter设置,可以轻松配置Jupyter Notebooks的Ruff。查看配置Ruff文档获取更多详细信息。
target-version = "py311"extend-include = ["*.ipynb"]line-length = 80[lint]extend-select = [ "UP", # pyupgrade "D", # pydocstyle][lint.pydocstyle]convention = "google"
GitHub Action & Pre-commit Hook
开发人员和团队可以通过`ruff-pre-commit`将Ruff用作pre-commit hook:
- repo: https://github.com/astral-sh/ruff-pre-commit # Ruff版本. rev: v0.1.5 hooks: # 运行linter。 - id: ruff args: [ --fix ] # 运行formatter。 - id: ruff-format
它也可以通过`ruff-action`用作GitHub Action:
name: Ruffon: [ push, pull_request ]jobs: ruff: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: chartboost/ruff-action@v1
Ruff VSCode插件
Ruff最令人愉快的方面就是它的VSCode插件。它简化了格式化和linting的过程,不再需要第三方插件。只需在扩展市场中搜索Ruff来安装它。
图片来自Ruff – Visual Studio Marketplace
我已经配置了`setting.json`以便在保存时进行格式化。
结论
Ruff提供了快速的linting和格式化功能,可用于更干净、更一致的Python代码。Ruff重新实现了700多个内置规则,并结合Rust进行性能优化,借鉴了Flake8、isort和pyupgrade等热门工具,以实施一套全面的最佳编码实践。精选的规则集侧重于捕获错误和关键的样式问题,而不会过度吹毛求疵。
与pre-commit hooks、GitHub Actions以及像VSCode这样的编辑器无缝集成,使得将Ruff纳入现代Python工作流程变得容易。无与伦比的速度和精心设计的规则集使得Ruff成为重视快速反馈、干净代码和良好团队协作的Python开发者的必备工具。Ruff通过将强大的功能与卓越的性能相结合,为Python linting和格式化设定了一个新标准。
****[Abid Ali Awan](https://www.polywork.com/kingabzpro)**** (@1abidaliawan) 是一位经过认证的数据科学家,热衷于构建机器学习模型。目前,他专注于内容创作,撰写有关机器学习和数据科学技术的技术博客。Abid拥有技术管理硕士学位和电信工程学士学位。他的愿景是利用图神经网络为那些与心理疾病斗争的学生构建一个AI产品。