良好的 Python 代码应有良好的格式规范(不止于遵守 PEP 8 ),使用一个更强大更专业的代码格式化工具,来替代编辑器自带的「格式化代码」功能是有一定必要的,这还可以使团队成员即使在不同编辑器下工作也可以得到完全相同的风格。相比于目前社区中较为流行的 autopep8,其实还有一个更好的选择 —— Black

简介

“Any color you like.”

GItHub | 官方文档 | PyPI | 在线试用

Black 自称“零妥协代码格式化工具(The uncompromising code formatter)”。

截止到2021年9月,Black 已经在 GitHub 斩获 22.4k 个 Stars,由 Google 开发维护的 YAPF 为 12.1k ,而 autopep8 则只有 3.9k 。可以说 Black 是目前最广受好评的 Python 代码格式化工具。

安装

可以通过 pip 直接从 PyPI 下载安装:

pip install black

注意需要 Python 3.6.2 以上的版本。

如果想在 Jupyter Notebooks 中使用,则可以通过如下代码安装:

pip install black[jupyter]

如果急于试用最新版本,可以通过下面的命令从 GitHub 安装(不推荐):

pip install git+git://github.com/psf/black

简单使用

作为脚本运行

black {source_file_or_directory}

作为 Python 包运行

如果将 Black 作为脚本运行不起作用,您可以尝试将其作为包运行:

python -m black {source_file_or_directory}

跳过字符串格式化

Black 会默认将字符串格式化为使用双引号包裹,但有些项目已经使用了单引号的规范且不应修改为双引号,就需要加上一个 -S / --skip-string-normalization 的选项。

black -S {source_file_or_directory}

集成到 IDE / 编辑器中

相比于每次都专门打开一个终端,手动使用命令行调用 Black 格式化代码,我们更希望能把 Black 集成到我们常用的 IDE / 编辑器中,不需要离开写代码的界面即可完成格式化操作。

在 Pycahrm 中使用

Black 官方文档中给出了在 Pycharm(或 IntelliJ IDEA)中配置使用 Black 的方法:

确认 Black 安装位置

在 macOS / Linux / BSD 上:

$ which black
/usr/local/bin/black  # 可能的位置

在 Windows 上:

$ where black
%LocalAppData%\Programs\Python\Python36-32\Scripts\black.exe  # 可能的位置

如果是使用 Pycahrm 建立的虚拟环境,则直接使用 $PyInterpreterDirectory$/black 作为程序路径。

在 Pycharm 中添加外部工具

打开 文件 -> 设置 -> 工具 -> 外部工具

File -> Settings -> Tools -> External Tools

创建工具

  • 名称:Black
  • 描述:毫不妥协的 Python 代码格式化工具
  • 程序:「上一小节得到的安装位置」
  • 参数:$FilePath$
  • 工作目录:$ProjectFileDir$

如果需要自定义其他选项,写在 $FilePath$ 前即可,比如代表「取消格式化字符串为双引号包裹”」的选项 -S

使用

在已经打开的代码编辑界面(或项目文件树的某个目录上)鼠标右键,找到 External Tools -> Black,点击即可。

设置快捷键

还可以在 设置 -> 键盘映射 -> 外部工具 -> Black 上右键,打开编辑快捷键的菜单,添加键盘快捷键:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fMWGYbut-1633632340478)(https://oss.muzing.top/image/20210925225052.png)]

如果已经习惯了 Pycharm 默认的Ctrl + Alt + L 快捷键格式化代码,那么可以这样设置:

  1. 在 主菜单 -> 代码 -> 重新格式化代码 中删去快捷键
  2. 给 外部工具 -> External Tools -> Black 设置键盘快捷键Ctrl + Alt + L

保存文件时自动格式化(可选)

  1. 确保已经安装了 File Watchers 插件

  2. 进入 设置 -> 工具 -> File Watchers,点击 + 以添加一个新的 watcher:

    • Name: Black
    • File type: Python
    • Scope: Project Files
    • Program: 上一小节得到的安装位置
    • Arguments: $FilePath$
    • Output paths to refresh: $FilePath$
    • Working directory: $ProjectFileDir$
  3. 在高级选型中:

    • 取消勾选 “Auto-save edited files to trigger the watcher”
    • 取消勾选 “Trigger the watcher on external changes”

在 VS code 中使用

VS code 官方文档介绍

安装 Python 插件

首先确保已经在 VS code 中安装了 Python 插件。如果没有安装,则在 VS code 中按下 Ctrl + P ,并输入如下命令:

ext install ms-python.python

或者直接在扩展商店中搜索 Python 并安装。

配置 Python 扩展

按下 Ctrl + , ,打开 VS code 设置

在「设置」中搜索 python formatting provider ,然后把默认的 autopep8 改为 black 即可。

保存文件时自动格式化代码(可选)

在「设置」界面搜索 format on save ,可以勾选打开保存时格式化文件的功能。

取消格式化为双引号包裹字符串(可选)

在「设置」界面的右上角打开 settings.json 配置文件

在配置文件中添加一行

"python.formatting.blackArgs": ["--skip-string-normalization"]

注意每个人的 settings.json 配置文件都有所不同,行号不太一样,在文件末尾新建一行添加即可。

在 Vim 中使用

同样可以在 Black 官方文档中找到在 Vim 中使用 Black 官方插件的方法:https://black.readthedocs.io/en/stable/integrations/editors.html#vim

更多

Black 还可以集成到许多其他编辑器中。此外,官方文档还给出了集成至 GitHub Actions 中、集成至利用 pre-commit 工具实现的版本控制集成工作流中的方法,这样每次更新项目都会自动使用 Black 重新格式化代码了。

详见文档:https://black.readthedocs.io/en/stable/integrations/index.html

其他

在 README 中展示

如果你的项目使用了 Black 工具,可以在 README.md 中加入下面一行

[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)

这样就可以显示一个 shields 图标了:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vzMw0bQg-1633632340494)(https://img.shields.io/badge/code%20style-black-000000.svg)]

吃瓜:单引号?双引号!

关于字符串应该用单引号还是双引号包裹,Black 的开发组成员和一些用户有不同的意见。在早先的版本中,Black 强制使用双引号,且用户无法自行修改。于是他们足足在 Issue 里“吵”了一百多楼,各种引经据典,据理力争……终于开发组不得不妥协,勉为其难的给出了一个不格式化字符串引号的选项。

GitHub 原楼请戳

进阶使用

我还将相当一部分 Black 官方文档 进行了翻译,包含全部命令行选项及详解、通过文件配置、The Black code style 等:

[保留占位,已经发布至我的博客,稍后发布至CSDN]

转载声明

本文为我的博客同名文章的精简版,可以点击下面的链接,查看本文的最新更新:

五彩斑斓的 Black —— Python代码格式化工具

本文允许转载,转载必须注明:

  • 作者:muzing
  • 原文链接:https://muzing.top/posts/a29e4743

五彩斑斓的 Black —— Python代码格式化工具相关推荐

  1. (转载)Python 代码格式化工具 Black-Python

    2019独角兽企业重金招聘Python工程师标准>>> 原文:https://www.oschina.net/p/black 前言 Black 号称是不妥协的 Python 代码格式 ...

  2. 推荐一个小而美的Python代码格式化工具

    代码可读性是评判代码质量的标准之一,有一个衡量代码质量的标准是 Martin 提出的 "WFT" 定律,即每分钟爆出 "WTF" 的次数.你在读别人代码或者做 ...

  3. 工具 每分钟_black: 一个不妥协的Python代码格式化工具

    代码可读性是评判代码质量的标准之一,有一个衡量代码质量的标准是 Martin 提出的 "WFT" 定律,即每分钟爆出 "WTF" 的次数.你在读别人代码或者做 ...

  4. vscode中对flake8(python静态代码检查工具)和yapf(python代码格式化工具)的设置

    在命令行下安装好flake8和yapf后在vscode中的用户设置(settings.json)中添加以下两行即可: "python.linting.flake8Enabled": ...

  5. python 格式化工具_Google的Python代码格式化工具YAPF详解

    平时习惯了杂乱无章地编写代码,而最后的代码勘定,却依赖于PyCharm自带的格式化工具,以及其自带的提示功能来规范代码.而pycharm里的格式化工具,不支持对多文件进行代码批量格式化,曾经尝试些解决 ...

  6. python 代码格式化工具:pep8ify

    资料: https://github.com/spulec/pep8ify 安装 $ pip install pep8ify 用法 Usage: 2to3 [options] file|dir ... ...

  7. YAPF —— Python代码格式化工具

    yapf lian.py 会在屏幕上输出格式化后的结果,不会修改文件 yaof -i lian.py 会修改文件 注意 这样是不行的,yapf会报错 这样可以

  8. python格式化代码工具_python 代码格式化工具:YAPF

    背景 现在的大多数 Python 代码格式化工具(比如:autopep8 和 pep8ify)是可以移除代码中的 lint 错误.这显然有些局限性.比如:遵循 PEP 8 指导的代码可能就不会被格式化 ...

  9. python代码自动格式化_代码的自动格式化

    代码格式化是一个在软件开发过程中值得一提的话题. 所谓代码格式化就是说,程序员在书写代码的过程中或者完成代码开发后对代码书写格式排版的调整,使得已经完成的代码变的更美观整洁也更具有可读性,也能增加完成 ...

最新文章

  1. 基于协同训练的半监督文本分类算法
  2. 终于装上了office2010
  3. left join 不重复_R语言ETL工程:连接(join)
  4. 138. 兔子与兔子【字符串哈希】
  5. 今年是SAP进入中国25周年,我从2007年毕业进入SAP成都研究院,也马上就待满14年了。
  6. c#中程序以管理员身份运行的三种办法
  7. 代码逻辑分析_双11模块79.34%的前端代码是怎样智能生成的?
  8. 【iCore3双核心板】发布 iCore3 应用开发平台硬件原理图
  9. mysql 联合索引的命中规则_可能是全网最好的MySQL重要知识点/面试题总结
  10. Linux中的rz和sz命令
  11. shell php文件是否存在字符串中,shell 判断字符串是否存在数组中的实现示例
  12. Springboot的Mybatis拦截器实现
  13. Ubuntu操作-01 安装NVIDIA显卡驱动
  14. 实用ps教程-第一节:使用ps制作GIF动图
  15. 液晶显示屏的LED背光辉度公式计算?
  16. 好好说话之hijack retaddr
  17. 在云端管理您的所有身份(AAD)-第二部分
  18. Speedoffice(word)如何添加文字水印
  19. 电脑异常关机后,AS报错,无法编译工程Could not load module metadata from ..
  20. 带pcb板的c语言实验报告,pcb实验报告.doc

热门文章

  1. C语言Hello World
  2. 批量转换 gbk 文件到utf8 文件,不引用三方类库【 java 代码】
  3. php gbk转utf8
  4. Java 开发工程师 面试题(一)
  5. python的海龟绘图
  6. Kafka实时数据同步
  7. 【修复H5农场复利】黄金家园农场理财游戏源码Thinkphp开发 带商城仓库商店模块
  8. Redis集群(Cluster)
  9. OceanBase 业务数据库实践(二)── DB2 迁移
  10. 《风之大冒险》3.18上线链游玩家|超高颜值、卡牌放置