因为我之前是做前端的,ESLint 和 Prettier 这样的工具给稍微有一点强迫症的我留下了很深刻的印象。所以,去年我写 pytorch-lightning-template 的时候去调研了一波 Python 领域的 Linter 和 Formatter 来确保代码质量。第一次发现了 Ruff,也就有了 这篇文章。后来的深入使用中,也确实发现了一些问题。因为当时 Ruff 本身是一个比较新的项目,他的生态并不是很完善,比如说当时还不能格式化代码,需要跟 Black 一起使用,他的 VSCode 插件不支持 Jupyter Notebook,没有 GitHub action,有一些规则还没有实现等等。
现在,经过差不多一年的时间,Ruff 已经脱离的 Beta 阶段,生态基本成型了。所以有了这一篇文章,来介绍一下我心目中的 Ruff
Ruff 一把梭哈,无脑替换 Black, Flake8, autopep8, isort 等
如果你不清楚 Linter 和 Formatter 的区别,可以先看看我之前写的 这篇文章。Black 问世的时候也是狠狠的风靡了一段时间,我也是用了很久,基本上只需要把默认的最大行宽
VSCode 插件再升级,支持 Jupyter Notebook 单元格格式化
注意,除非你需要在命令行运行 Ruff,否则完全没有必要在项目中安装 Ruff 依赖(比如
pip install ruff ),因为 VSCode 插件自己带了一个独立的 ruff 可执行文件。
还是直接在 VSCode 的插件市场搜索 Ruff (charliermarsh.ruff)下载安装即可。
"[python]": { // 仅对 python 文件生效 "editor.defaultFormatter": "charliermarsh.ruff", // 默认使用 Ruff 格式化 "editor.formatOnSave": true, // 保存时自动格式化 "editor.codeActionsOnSave": { "source.fixAll.ruff": "explicit", // 保存时自动修复可修复的 lint 错误 "source.organizeImports.ruff": "explicit", // 保存时自动排序 import 语句 } }, "notebook.formatOnSave.enabled": true, // notebook 保存时自动格式化 "notebook.codeActionsOnSave": { "source.fixAll": true, // notebook 保存时自动修复可修复的 lint 错误 "source.organizeImports": true // notebook 保存时自动排序 import 语句 }
这样设置,在平时使用的时候,就只需要记住
常用配置与规则
Ruff 的配置也很简单,支持在
[tool.ruff] line-length = 120 # 代码最大行宽 select = [ # 选择的规则 "F", "E", "W", "UP", ] ignore = ["F401"] # 忽略的规则
而常见的规则如下:
标识 | 规则 | 简介 |
---|---|---|
F | pyflakes | 提供了一些比较基础的问题检查。 |
E,W | pycodestyle errors, warnings | PEP8 检查。 |
I | isort | 对 import 语句进行排序。 |
UP | pyupgrade | 提示新版本的 Python 语法。 |
N | pep8-naming | PEP8 命名规范检查。 |
PL | Pylint | 知名静态代码检查器。 |
PERF | pyperf | 检测一些性能问题。 |
RUF | Ruff | Ruff 社区自己实现的一些规则。 |
团队协作
如果是多人协作的项目,我们可以设置一些自动工具来确保 Ruff 的规则被遵守。从宽松到严格来说,可以分为三个阶段:
最宽松的是 VSCode 插件推荐,在
{ "recommendations": [ "ms-python.python", "ms-python.vscode-pylance", "charliermarsh.ruff" ] }
这样别人用 VSCode 打开时就会提示安装这些插件,当然他们也有可能不遵守这个隐性规则,或者他们使用的不是 VSCode。你还可以使用 pre-commit,
- repo: https://github.com/astral-sh/ruff-pre-commit # Ruff version. rev: v0.1.4 hooks: # Run the linter. - id: ruff # Run the formatter. - id: ruff-format
这样每次提交代码的时候,就会自动运行 Ruff 的 linter 和 formatter,如果有错误,就会提示并阻止提交。当然,因为这是在别人的电脑上本地运行的,还是可以跳过他。更严格的方式是使用 CI(Continuous Integration) 工具,这里介绍一下 GitHub Action 的配置,在
name: Ruff on: [push, pull_request] jobs: ruff: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: chartboost/ruff-action@v1
这样在代码被
替代 Pylint
Pylint 是 Python 中很流行的 Linter 工具,Ruff 已经提供了部分规则,具体可以去看 Pylint 兼容进度。
和类型检查器之间的关系
像 Mypy, Pyright, Pyre 这样的类型检查器,可以通过类型推断,帮助你找出潜在的类型匹配错误。然而 Ruff 明确表示他们不会提供类型检查的功能。我觉得这也无所谓,因为我尝试打开过 VSCode 的类型检查(由Pylance 插件提供,底层就是 Pyright),Python 的类型系统本身就还在发展过程中,API 不是很稳定,尤其是在使用第三方库的时候,经常会报错。所以个人感觉目前意义还不是很大。
以上就是“大一统的 Ruff: All-in-One Linter & Formatter for Python”的全部内容,希望对你有所帮助。
?
?关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
三、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、Python练习题
检查学习结果。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
最后祝大家天天进步!!
上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。