不妥协的代码格式化程序。

noir的Python项目详细描述


为什么是黑鬼?

Noir是一个替换黑色的下拉列表,默认行长度设置为79 字符。

要替换黑色,只需将 requirements.txt和/或setup.py.

noir提供二进制黑色所以您不必在 您的构建管道。

black logo

不妥协的代码格式化程序

构建状态documentation statuscoverage statuslicense:mitpypidownloadscode style:black

< Buff行情>

"您喜欢的任何颜色。"

black是不妥协的python代码格式化程序。通过使用它,你 同意放弃对手写格式细节的控制。作为回报, 黑色给您带来速度、确定性和从pycodesyle的自由 关于格式的唠叨。你将节省时间和精力 更重要的事情。

不管您正在阅读的项目是什么,变黑的代码看起来都一样。 格式化在一段时间后变得透明,您可以关注 取而代之的是内容。

黑色通过产生最小的差异使代码审查更快 可能的。

现在使用黑色操场试试。 请观看PYCON 2019讲座了解更多信息。


内容:安装和使用| 代码风格| pyproject.toml。| 编辑集成| 黑色。| 版本控制集成| 忽略未修改的文件rel="nofollow">忽略未修改的文件| 使用人| 推荐信| 显示您的风格| 贡献| 更改日志| 作者


安装和使用

安装

黑色可以通过运行pip install noir来安装。它需要 python 3.6.0+,但您也可以用它重新格式化python 2代码。

用法

要立即开始使用合理的默认设置:

black {source_file_or_directory}

命令行选项

黑色不提供许多选项。你可以通过运行 黑色--帮助

black [OPTIONS] [SRC]...

Options:
  -c, --code TEXT                 Format the code passed in as a string.
  -l, --line-length INTEGER       How many characters per line to allow.
                                  [default: 79]
  -t, --target-version [py27|py33|py34|py35|py36|py37|py38]
                                  Python versions that should be supported by
                                  Black's output. [default: per-file auto-
                                  detection]
  --py36                          Allow using Python 3.6-only syntax on all
                                  input files.  This will put trailing commas
                                  in function signatures and calls also after
                                  *args and **kwargs. Deprecated; use
                                  --target-version instead. [default: per-file
                                  auto-detection]
  --pyi                           Format all input files like typing stubs
                                  regardless of file extension (useful when
                                  piping source on standard input).
  -S, --skip-string-normalization
                                  Don't normalize string quotes or prefixes.
  --check                         Don't write the files back, just return the
                                  status.  Return code 0 means nothing would
                                  change.  Return code 1 means some files
                                  would be reformatted.  Return code 123 means
                                  there was an internal error.
  --diff                          Don't write the files back, just output a
                                  diff for each file on stdout.
  --fast / --safe                 If --fast given, skip temporary sanity
                                  checks. [default: --safe]
  --include TEXT                  A regular expression that matches files and
                                  directories that should be included on
                                  recursive searches.  An empty value means
                                  all files are included regardless of the
                                  name.  Use forward slashes for directories
                                  on all platforms (Windows, too).  Exclusions
                                  are calculated first, inclusions later.
                                  [default: \.pyi?$]
  --exclude TEXT                  A regular expression that matches files and
                                  directories that should be excluded on
                                  recursive searches.  An empty value means no
                                  paths are excluded. Use forward slashes for
                                  directories on all platforms (Windows, too).
                                  Exclusions are calculated first, inclusions
                                  later.  [default: /(\.eggs|\.git|\.hg|\.mypy
                                  _cache|\.nox|\.tox|\.venv|_build|buck-
                                  out|build|dist)/]
  -q, --quiet                     Don't emit non-error messages to stderr.
                                  Errors are still emitted, silence those with
                                  2>/dev/null.
  -v, --verbose                   Also emit messages to stderr about files
                                  that were not changed or were ignored due to
                                  --exclude=.
  --version                       Show the version and exit.
  --config PATH                   Read configuration from PATH.
  -h, --help                      Show this message and exit.

black是一个性能良好的unix风格的命令行工具:

  • 如果没有消息源传递给它,它将不起作用;
  • 如果- 用作文件名;
  • 它只在标准错误时向用户输出消息;
  • 以代码0退出,除非发生内部错误(或检查 使用)

注意:这是测试版产品

黑色已经被许多大小项目成功地使用了。 它还提供了一个不错的测试套件。不过,它还是很新的。 事情可能会有一段时间不稳定。这是由 "beta"宝藏分类器,以及由"b"在版本号。 这对你意味着在格式化程序稳定之前, 您应该预计将来会更改某些格式。那是 也就是说,并没有计划对风格进行重大的改变,主要是对bug的响应 报告

此外,作为临时安全措施,黑色将检查 重新格式化的代码仍然会生成一个有效的ast,该ast与 原创。这会减慢速度。如果你感到自信,使用 --快速

黑色代码样式

黑色将整个文件重新格式化到位。它是不可配置的。它 不考虑以前的格式。它不会重新格式化 以fmt:off开头,以fmt:on结尾的块。fmt:开/关 必须在相同的缩进水平上。它也 识别yapf的阻止注释 同样的效果,作为跨代码的礼貌。

如何黑色换行

黑色忽略以前的格式并应用统一的水平 以及代码的垂直空格。水平方向的规则 空白可以概括为:做任何让pycodestyle高兴的事情。 black使用的编码样式可以看作 PEP 8,

对于垂直空白,黑色尝试呈现一个完整的表达式 或每行的简单语句。如果这符合分配的行长度, 很好,

# in:l=[1,2,3,]# out:l=[1,2,3]

否则,黑色将查看第一个外部匹配的内容 将括号放在单独的缩进行中。

# in:ImportantClass.important_method(exc,limit,lookup_lines,capture_locals,extra_argument)# out:ImportantClass.important_method(exc,limit,lookup_lines,capture_locals,extra_argument)

如果这仍然不符合法案,它将分解内部 表达式进一步使用相同的规则,缩进匹配的括号 每一次。如果匹配方括号对的内容是 逗号分隔(如参数列表或dict文本等) 然后黑色将首先尝试使它们与 匹配的括号。如果那不起作用,它会把他们都放进去 分开的线。

# in:defvery_important_function(template:str,*variables,file:os.PathLike,engine:str,header:bool=True,debug:bool=False):"""Applies `variables` to the `template` and writes to `file`."""withopen(file,'w')asf:...# out:defvery_important_function(template:str,*variables,file:os.PathLike,engine:str,header:bool=True,debug:bool=False,):"""Applies `variables` to the `template` and writes to `file`."""withopen(file,"w")asf:...

你可能已经注意到了右括号总是有dedented和 总是添加一个尾随逗号。这样的格式会产生更小的 diffs;添加或删除元素时,它总是只有一行。 另外,去掉右括号可以提供一个清晰的分隔符 在代码的两个不同部分之间 缩进级别(如参数列表和 以上示例)。

如果数据结构文本(tuple、list、set、dict)或一行"from" 导入不能符合分配的长度,它总是被拆分为一个 每行元素。这样可以最小化差异,并使 用于查找哪个提交引入了特定项的代码。这也 使黑色与 以下配置。

<细节>a compatible`.isort.cfg`
[settings]
multi_line_output=3
include_trailing_comma=True
force_grid_wrap=0
use_parentheses=True
line_length=79

等效的命令行是:

$ isort --multi-line=3 --trailing-comma --force-grid-wrap=0 --use-parentheses --line-width=79 [ file.py ]
<详细内容>

空行

黑色避免了虚假的垂直空白。这是本着 pep 8表示在函数中垂直空格只应该是 节约使用。

黑色允许函数内部有一个空行,并且 原始编辑器在模块级留下的两个空行,除了 当它们在括号内时。因为这样的表达 总是重新格式化以适应最小空间,此空白将丢失。

它还将在函数定义前后插入适当的间距。 它是内部函数前后的一行,前后的两行 模块级函数和类之后。黑色不会置空 函数/类定义和独立注释之间的行 紧跟在给定函数/类之前。

黑色将在类级docstring之间强制使用单个空行 以及后面的第一个字段或方法。这符合 pep 257

黑色不会在函数docstrings后插入空行,除非 由于内部函数立即启动,因此需要空行 之后,

尾随逗号

黑色将在拆分的表达式中添加尾随逗号 以逗号表示,其中每个元素都在自己的行上。这包括功能 签名。

如果表达式与 线。这使您的线路不超过 分配的行长度限制。此外,在这个场景中,如果您添加 你的另一个论点,你可能也符合 不管怎样。这不会使差异变大。

删除尾部逗号的一个例外是 只有一个要素。在这种情况下,黑色不会触及单个尾部 逗号,因为这会意外地更改基础数据类型。注释 索引时使用逗号也是如此。这是 伪装的元组:numpy_array[3,]

添加尾随逗号的一个例外是函数签名 包含**参数**kwargs。在本例中,尾随逗号 只能在Python3.6上安全使用。黑色将检测您的文件是否 已经是3.6+,在这种情况下使用尾随逗号。如果你 不知道它怎么知道,它寻找f字符串和现有的拖尾用法 函数签名中有星的逗号。换句话说, 如果您希望在这种情况下使用尾随逗号,而黑色没有 认识到这样做是安全的,手动放在那里,然后黑色将 保持它。

字符串

黑色首选双引号("")而不是单引号(' 以及。它将用前者代替后者,只要它 不会导致比以前更多的反斜杠转义。

black还将字符串前缀标准化,使其始终小写。 除此之外,如果您的代码已经是python 3.6+,或者它正在使用 unicode_文本将来导入,黑色将从 字符串前缀,因为在这些情况下它没有意义。

对单一形式的引用进行标准化的主要原因是美学。 到处都有一种引语可以减少读者的注意力。 它还将使未来版本的black能够连续合并 结束于同一行的字符串文本(请参见 26了解详细信息)。

为什么要用双引号?他们预料英语中会有撇号 文本。它们与pep 257中描述的docstring标准相匹配。 双引号("")中的空字符串不可能与 一个双引号,不考虑使用的字体和语法突出显示。 除此之外,字符串的双引号与 python经常与之交互。

在某些键盘布局(如美式英语)上,键入单引号是 比双引号简单一点。后者需要轮班 关键。我在这里的建议是继续使用打字速度快的东西 让黑色处理转换。

如果您在一个带有预先存在字符串的大型项目中采用black。 惯例(如流行的"单引号表示数据,双引号表示 可读字符串"",您可以 在命令行上传递-跳过字符串规范化。意思是 作为领养帮助者,避免将其用于新项目。

数字文本

黑色将大多数数字文本标准化,以便在 数字本身的语法部分和大写字母:0xab 而不是0xab1e10而不是1e10。python 2长文本是 样式设置为2l而不是2l以避免l1之间的混淆

换行符和二进制运算符

黑色将在分割块时在二进制运算符之前打断一行 多行的代码。这使得黑色符合 最近对pep 8进行了更改 风格指南,强调这种方法可以提高可读性。

此行为可能会在二进制运算符之前引发w503换行符 样式指南强制工具,如flake8。由于w503不符合PEP 8, 您应该告诉flake8忽略这些警告。

切片

PEP 8建议使用" rel="nofollow"> 将片中的视为优先级最低的二进制运算符,并 在两边留出相等的空间,除非省略了一个参数 (例如,ham[1+1:])。它还指出,对于扩展切片,两者都 运算符必须具有相同的间距,除非参数是 省略(ham[1+1::])。黑色始终如一地执行这些规则。

此行为可能会在样式指南中的":"之前引发e203空白 像flake8这样的强制工具。由于E203不符合PEP 8,您应该 告诉flake8忽略这些警告。

括号

在python语法中,有些括号是可选的。任何表达式都可以 被包裹在一对圆括号中形成一个原子。有几个 有趣的案例:

在这些情况下,当整个语句适合 在一行中,或者如果内部表达式没有任何分隔符 进一步分裂。如果只有一个分隔符和表达式 以括号开始或结束,括号也可以成功 省略,因为现有的括号对将组织表达式 不管怎样都很整洁。否则,将添加括号。

请注意,黑色不会添加或删除任何其他嵌套 为了清楚或更进一步,您可能需要括号 代码组织。例如,这些括号将不会是 删除:

returnnot(thisorthat)decision=(maybe.this()andvalues>0)or(maybe.that()andvalues<0)

呼叫链

一些流行的api,比如orms,使用调用链。这种api样式是已知的 作为一个流畅的界面。 黑色通过处理调用或索引后的点来格式化 像极低优先级分隔符一样的操作。更容易显示 行为而不是解释。看这个例子:

defexample(session):result=(session.query(models.Customer.id).filter(models.Customer.account_id==account_id,models.Customer.email==email_address,).order_by(models.Customer.id.asc()).all())

键入存根文件

pep 484描述了python中类型提示的语法。其中之一 用于输入的用例为 不能直接包含它们(它们可以用C编写,也可以 成为第三方,或者它们的实现可能过于动态,等等)。

要解决此问题,请使用.pyi文件存根文件 分机可以是 用于描述外部模块的键入信息。那些存根 文件忽略类和函数的实现 相反,它们只包含文件的结构(清单 全局函数、函数和类及其成员)。推荐的 这些文件的代码样式比PEP 8更简洁:

  • 首选与类/函数签名在同一行的..
  • 避免在连续的模块级函数之间出现垂直空白, 单个类中的名称、方法和字段;
  • 在顶级类定义之间使用一个空行,或者不使用 如果课程很小。

黑色执行上述规则。对于 格式化尚未强制执行但可能位于 格式化程序的未来版本:

  • 所有函数体都应为空(包含..而不是主体);
  • 不要使用docstrings;
  • 更喜欢而不是pass
  • 对于具有默认值的参数,请使用..而不是实际的默认值;
  • 避免在类型注释中使用字符串,存根文件支持 以本机方式转发引用(如python 3.7代码中的from_uuu future_uuu import annotations);
  • 使用变量注释而不是类型注释,即使对于 针对较旧版本的python;
  • 对于默认为none的参数,请显式使用optional[]
  • 使用float而不是union[int,float]

pyproject.toml

黑色可以读取其项目特定的默认值 来自pyproject.toml文件的命令行选项。这是 特别适用于指定自定义的--include--exclude 项目模式。

专业提示:如果您问自己"我需要配置什么吗?" 答案是"不"。黑色完全是合理的默认值。

什么是pyproject.toml文件?

>="https://www.python.org/dev/peps/pep-0518/" rel="nofollow">pep 518定义 pyproject.toml作为存储生成系统的配置文件 python项目的要求。借助工具 比如诗歌或 flit可以完全替换 需要setup.pysetup.cfg文件。

其中黑色查找文件

默认情况下,从 命令行上传递的所有文件和目录的基本目录。 如果不存在,则在父目录中查找。它停止寻找 当它找到文件,或者找到一个.git目录,或者找到一个.hg目录时, 或文件系统的根目录,以先到者为准。

如果您正在格式化标准输入,黑色将查找配置 从当前工作目录开始。

您还可以显式指定特定文件的路径 需要使用--config。在这种情况下,黑色不会查找任何 其他文件。

如果您运行的是--verbose,您将看到一条蓝色消息,如果 找到并使用了一个文件。

请注意blackd不会使用pyproject.toml配置。

配置格式

如文件扩展名所示,pyproject.toml是一个toml文件。它包含单独的 不同工具的部分。black正在使用[tool.black] 部分。选项键与上选项的长名称相同 命令行。

注意,您必须在toml中使用单引号字符串 表达。它相当于python中的r字符串。多线 黑色将字符串视为详细的正则表达式。使用[] 表示有效空格字符。

<细节>示例"pyproject.toml"
black {source_file_or_directory}
0 <详细内容>

查找层次结构

命令行选项具有默认值,可以在--help中看到。 apyproject.toml可以覆盖这些默认值。最后,选择 由用户在命令行上提供,覆盖两者。

黑色将只在整个过程中使用一个pyproject.toml文件 运行。它不查找多个文件,也不构成 从文件层次结构的不同级别进行配置。

编辑器集成

emacs

使用proofit404/blackenelpy

PyCharm/Intellij创意

  1. 安装黑色
black {source_file_or_directory}
1
  1. 找到您的黑色安装文件夹。

在macos/linux/bsd上:

black {source_file_or_directory}
2

在Windows上:

black {source_file_or_directory}
3
  1. 在pycharm/intellij idea中打开外部工具

在MacOS上:

pycharm->;首选项->;工具->;外部工具

在Windows/Linux/BSD上:

文件->;设置->;工具->;外部工具

  1. 单击+图标添加具有以下值的新外部工具:

    • 名称:黑色
    • 描述:黑色是一种永不妥协的python代码格式化程序。
    • 程序:<;从步骤2安装位置
    • 参数:"$filepath$"
  2. 通过选择tools->;external tools->;black格式化当前打开的文件

    • 或者,也可以通过导航到首选项或设置->;keymap->;外部工具->;外部工具-黑色来设置键盘快捷方式
  3. (可选)在每次保存文件时运行黑色

    1. 确保您拥有文件监视程序插件已安装。
    2. 转到首选项或设置->;工具->;文件监视程序,然后单击+添加新的监视程序:
      • 名称:黑色
      • 文件类型:python
      • 范围:项目文件
      • 程序:<;从步骤2安装位置
      • 参数:$filepath$
      • 要刷新的输出路径:$filepath$
      • 工作目录:$projectfiledir$
    • 取消选中"自动保存编辑的文件以触发监视程序"

机翼侧面

Wing通过操作系统命令工具支持Black,如Wing文档中关于pep8格式的说明。详细步骤如下:

  1. 安装黑色
black {source_file_or_directory}
1
  1. 确保它从命令行运行,例如
black {source_file_or_directory}
5
  1. 在Wing IDE中,激活操作系统命令面板并定义命令"黑色"以在当前选定的文件上执行黑色:
  • 使用"工具"->;"操作系统命令"菜单选项
  • 单击操作系统命令中的+新建:命令行。
    • 标题:黑色
    • 命令行:黑色%s
    • I/O编码:使用默认值
    • 键绑定:f1
    • [X]执行时发出操作系统命令
    • [X]执行前自动保存文件
    • [X]线路模式
  1. 在编辑器中选择一个文件,然后按f1或在步骤3中选择的任何键绑定来重新格式化该文件。

VIM

命令和快捷方式:

  • :黑色格式化整个文件(不支持范围);
  • :black upgrade在virtualenv;内部升级black
  • :black version在 虚拟化。

配置:

  • g:black_fast(默认为0
  • g:黑色线条长度(默认为88
  • g:black_skip_string_normalization(默认为0
  • g:black_virtualenv(默认为~/.vim/black

使用vim插头安装

black {source_file_or_directory}
6

或者使用vundle

black {source_file_or_directory}
7

或者您可以从plugin/black.vim复制插件。 如果这需要对vim 8的内置进行任何更改,请告诉我 packadd或病原体等。

这个插件需要用python 3.6+支持构建vim 7.0+。它 需要python 3.6能够在vim进程中运行black,vim进程 比调用外部命令快得多。

在第一次运行时,插件使用右边的 python版本并自动安装black。以后可以升级 通过调用:blackupgrade并重新启动vim。

如果你需要做些特别的事情来让你的虚拟现实发挥作用 安装黑色(例如,要从master运行一个版本)。 手动创建一个virtualenv并指向它。 插件将使用它。

要在保存时运行black,请在.vimrcinit.vim中添加以下行:

black {source_file_or_directory}
8

如何使用python 3.6获得vim?< /强> 在ubuntu 17.10vim上,默认情况下附带python 3.6。 在带有自制程序的MacOS上运行:brew install vim--with-python3。 从源代码构建vim时,使用: /configure--enable-python3interp=yes。网上有很多指南 这样做。

Visual Studio代码

使用python扩展名说明)。

升华文本3

使用子包插件

Jupyter笔记本魔术

使用blackcellmagic

python语言服务器

如果编辑器支持语言服务器协议 (atom、sublime文本、visual studio代码等等),您可以使用 python语言服务器 pyls black插件。

原子/核素

使用python blackpython black

其他编辑器

其他编辑需要外部贡献。

欢迎使用补丁程序!

任何可以使用其stdio模式(只是 使用-作为文件名。 格式化后的代码将在stdout上返回(除非--checkwas 通过)。黑色仍将在stderr上发出消息,但这不应该 影响您的用例。

这可以用于pycharm或intellij的文件监视程序

黑色

black是一个小型http服务器,通过 一个简单的协议。使用它的主要好处是避免支付 每次想变黑时启动新的进程的成本 文件.< /P>

用法

默认情况下,black不与black一起打包,因为它有附加的 依赖关系。您需要执行pip install noir[d]才能安装它。

您可以在默认端口上启动服务器,只绑定到本地接口 通过运行blackd。你会看到一行提到服务器的版本, 以及它所监听的主机和端口。blackd将打印访问日志 类似于标准输出上的大多数web服务器,与任何异常跟踪合并 由无效的格式化请求引起。

black提供的选项甚至比black更少。你可以通过跑步看到他们 blackd--帮助

black {source_file_or_directory}
9

目前还没有正式的blackd客户端工具!你可以测试一下布莱克德 使用旋度工作

black [OPTIONS] [SRC]...

Options:
  -c, --code TEXT                 Format the code passed in as a string.
  -l, --line-length INTEGER       How many characters per line to allow.
                                  [default: 79]
  -t, --target-version [py27|py33|py34|py35|py36|py37|py38]
                                  Python versions that should be supported by
                                  Black's output. [default: per-file auto-
                                  detection]
  --py36                          Allow using Python 3.6-only syntax on all
                                  input files.  This will put trailing commas
                                  in function signatures and calls also after
                                  *args and **kwargs. Deprecated; use
                                  --target-version instead. [default: per-file
                                  auto-detection]
  --pyi                           Format all input files like typing stubs
                                  regardless of file extension (useful when
                                  piping source on standard input).
  -S, --skip-string-normalization
                                  Don't normalize string quotes or prefixes.
  --check                         Don't write the files back, just return the
                                  status.  Return code 0 means nothing would
                                  change.  Return code 1 means some files
                                  would be reformatted.  Return code 123 means
                                  there was an internal error.
  --diff                          Don't write the files back, just output a
                                  diff for each file on stdout.
  --fast / --safe                 If --fast given, skip temporary sanity
                                  checks. [default: --safe]
  --include TEXT                  A regular expression that matches files and
                                  directories that should be included on
                                  recursive searches.  An empty value means
                                  all files are included regardless of the
                                  name.  Use forward slashes for directories
                                  on all platforms (Windows, too).  Exclusions
                                  are calculated first, inclusions later.
                                  [default: \.pyi?$]
  --exclude TEXT                  A regular expression that matches files and
                                  directories that should be excluded on
                                  recursive searches.  An empty value means no
                                  paths are excluded. Use forward slashes for
                                  directories on all platforms (Windows, too).
                                  Exclusions are calculated first, inclusions
                                  later.  [default: /(\.eggs|\.git|\.hg|\.mypy
                                  _cache|\.nox|\.tox|\.venv|_build|buck-
                                  out|build|dist)/]
  -q, --quiet                     Don't emit non-error messages to stderr.
                                  Errors are still emitted, silence those with
                                  2>/dev/null.
  -v, --verbose                   Also emit messages to stderr about files
                                  that were not changed or were ignored due to
                                  --exclude=.
  --version                       Show the version and exit.
  --config PATH                   Read configuration from PATH.
  -h, --help                      Show this message and exit.
0

协议

blackd只接受post路径下的请求。请求的主体 应该包含要格式化、编码的python源代码 根据内容类型请求头中的字符集字段。如果没有 charset是指定的,blackd假定utf-8

有几个http头控制源的格式。这些 对应于black的命令行标志。有一个例外: x-protocol-version如果存在,则应具有值1,否则 请求被http 501拒绝(未实现)。

控制代码格式的标题是:

  • x行长度:对应于--行长度命令行标志。
  • x-skip-string-normalization:对应于--skip string normalization 命令行标志。如果存在且其值不是空字符串,则没有字符串 将执行标准化。
  • x-fast-or-safe:如果设置为fastblackd将执行s黑色在 传递了--fast命令行标志。
  • x-python-variant:如果设置为pyi,则当 传递了--pyi命令行标志。否则,其值必须与 python版本或一组逗号分隔的python版本(可选) 前缀为py。例如,请求兼容的代码 对于python 3.5和3.6,将头设置为py3.5,py3.6

如果这些头中的任何一个设置为无效值,blackd返回一个http 400 错误响应,在消息正文中提及有问题的标题的名称。

除上述之外,blackd可以生成以下响应代码:

  • http 204:如果输入的格式已经很好。响应体是 空,
  • http 200:如果输入需要格式化。回应机构 包含变黑的python代码,并设置内容类型头 相应地。
  • http 400:如果输入包含语法错误。错误的详细信息是 在响应正文中返回。
  • http 500:尝试格式化输入时是否有任何错误。 响应正文包含错误的文本表示。

版本控制集成

使用预提交。一旦您拥有它 已安装,请将此添加到 .pre commit config.yaml在存储库中:

black [OPTIONS] [SRC]...

Options:
  -c, --code TEXT                 Format the code passed in as a string.
  -l, --line-length INTEGER       How many characters per line to allow.
                                  [default: 79]
  -t, --target-version [py27|py33|py34|py35|py36|py37|py38]
                                  Python versions that should be supported by
                                  Black's output. [default: per-file auto-
                                  detection]
  --py36                          Allow using Python 3.6-only syntax on all
                                  input files.  This will put trailing commas
                                  in function signatures and calls also after
                                  *args and **kwargs. Deprecated; use
                                  --target-version instead. [default: per-file
                                  auto-detection]
  --pyi                           Format all input files like typing stubs
                                  regardless of file extension (useful when
                                  piping source on standard input).
  -S, --skip-string-normalization
                                  Don't normalize string quotes or prefixes.
  --check                         Don't write the files back, just return the
                                  status.  Return code 0 means nothing would
                                  change.  Return code 1 means some files
                                  would be reformatted.  Return code 123 means
                                  there was an internal error.
  --diff                          Don't write the files back, just output a
                                  diff for each file on stdout.
  --fast / --safe                 If --fast given, skip temporary sanity
                                  checks. [default: --safe]
  --include TEXT                  A regular expression that matches files and
                                  directories that should be included on
                                  recursive searches.  An empty value means
                                  all files are included regardless of the
                                  name.  Use forward slashes for directories
                                  on all platforms (Windows, too).  Exclusions
                                  are calculated first, inclusions later.
                                  [default: \.pyi?$]
  --exclude TEXT                  A regular expression that matches files and
                                  directories that should be excluded on
                                  recursive searches.  An empty value means no
                                  paths are excluded. Use forward slashes for
                                  directories on all platforms (Windows, too).
                                  Exclusions are calculated first, inclusions
                                  later.  [default: /(\.eggs|\.git|\.hg|\.mypy
                                  _cache|\.nox|\.tox|\.venv|_build|buck-
                                  out|build|dist)/]
  -q, --quiet                     Don't emit non-error messages to stderr.
                                  Errors are still emitted, silence those with
                                  2>/dev/null.
  -v, --verbose                   Also emit messages to stderr about files
                                  that were not changed or were ignored due to
                                  --exclude=.
  --version                       Show the version and exit.
  --config PATH                   Read configuration from PATH.
  -h, --help                      Show this message and exit.
1

然后运行预提交安装即可开始安装。

避免在钩子中使用args。相反,存储必要的配置 在pyproject.toml中,让编辑器和命令行使用black all 对你的项目要始终如一。请参见black自己的pyproject.toml 例如。

如果您已经在使用Python3.7,请切换语言版本 因此。最后,stable是固定到最新的 在PYPI上释放。如果您希望在master上运行,这也是一个选项。

忽略未修改的文件

黑色会记住已格式化的文件,除非使用了--diff标记或 代码通过标准输入传递。此信息按用户存储。确切的 文件的位置取决于黑色版本和黑色所在的系统 运行。文件不可移植。通用操作系统上的标准位置 是:

  • 窗口:c:\\用户\<;用户名>;\appdata\local\black\black\cache\<;版本>;\cache。<;行长度>;<;文件模式>;.pickle
  • macos:/users/<;username>;/库/缓存/black/<;版本>;/缓存。<;行长度>;<;文件模式>;.pickle
  • Linux:/home/<;用户名>;/.cache/black/<;版本>;/缓存。<;行长度>;<;文件模式>;.pickle

文件模式是一个int标志,用于确定文件是否仅格式化为3.6+, 以及是否省略了字符串规范化。

要覆盖这些文件在MacOS或Linux上的位置,请设置环境变量 xdg_cache_home到您的首选位置。例如,如果要将缓存放入 运行black的目录,设置xdg_cache_home=.cache黑色将 将以上文件写入.cache/black/<;version>;/

使用人

以下值得注意的开源项目信任 一致的代码风格:pytest,tox,pyramid,django channels,hypothesis, attrs、sqlalchemy、poetry、pypa应用程序(warehouse、pipenv、virtualenv) 每个数据狗代理集成。

我们是不是失踪了有人吗?告诉我们。

推荐信

尘土飞扬的菲利普斯编写器

< Buff行情>

黑色是固执己见的,所以你不必这样。

hynek schlawack创建attrs,核心 twisted和cpython的开发者:

< Buff行情>

我只想要一个不烂的自动格式化程序!

carl meyerdjango核心开发人员:

< Buff行情>

至少名字不错。

kenneth reitz,请求的创建者 以及pipenv

< Buff行情>

这大大改进了代码的格式。非常感谢!

展示您的风格

使用项目自述文件中的徽章。md:

black [OPTIONS] [SRC]...

Options:
  -c, --code TEXT                 Format the code passed in as a string.
  -l, --line-length INTEGER       How many characters per line to allow.
                                  [default: 79]
  -t, --target-version [py27|py33|py34|py35|py36|py37|py38]
                                  Python versions that should be supported by
                                  Black's output. [default: per-file auto-
                                  detection]
  --py36                          Allow using Python 3.6-only syntax on all
                                  input files.  This will put trailing commas
                                  in function signatures and calls also after
                                  *args and **kwargs. Deprecated; use
                                  --target-version instead. [default: per-file
                                  auto-detection]
  --pyi                           Format all input files like typing stubs
                                  regardless of file extension (useful when
                                  piping source on standard input).
  -S, --skip-string-normalization
                                  Don't normalize string quotes or prefixes.
  --check                         Don't write the files back, just return the
                                  status.  Return code 0 means nothing would
                                  change.  Return code 1 means some files
                                  would be reformatted.  Return code 123 means
                                  there was an internal error.
  --diff                          Don't write the files back, just output a
                                  diff for each file on stdout.
  --fast / --safe                 If --fast given, skip temporary sanity
                                  checks. [default: --safe]
  --include TEXT                  A regular expression that matches files and
                                  directories that should be included on
                                  recursive searches.  An empty value means
                                  all files are included regardless of the
                                  name.  Use forward slashes for directories
                                  on all platforms (Windows, too).  Exclusions
                                  are calculated first, inclusions later.
                                  [default: \.pyi?$]
  --exclude TEXT                  A regular expression that matches files and
                                  directories that should be excluded on
                                  recursive searches.  An empty value means no
                                  paths are excluded. Use forward slashes for
                                  directories on all platforms (Windows, too).
                                  Exclusions are calculated first, inclusions
                                  later.  [default: /(\.eggs|\.git|\.hg|\.mypy
                                  _cache|\.nox|\.tox|\.venv|_build|buck-
                                  out|build|dist)/]
  -q, --quiet                     Don't emit non-error messages to stderr.
                                  Errors are still emitted, silence those with
                                  2>/dev/null.
  -v, --verbose                   Also emit messages to stderr about files
                                  that were not changed or were ignored due to
                                  --exclude=.
  --version                       Show the version and exit.
  --config PATH                   Read configuration from PATH.
  -h, --help                      Show this message and exit.
2

使用自述文件中的徽章。rst:

black [OPTIONS] [SRC]...

Options:
  -c, --code TEXT                 Format the code passed in as a string.
  -l, --line-length INTEGER       How many characters per line to allow.
                                  [default: 79]
  -t, --target-version [py27|py33|py34|py35|py36|py37|py38]
                                  Python versions that should be supported by
                                  Black's output. [default: per-file auto-
                                  detection]
  --py36                          Allow using Python 3.6-only syntax on all
                                  input files.  This will put trailing commas
                                  in function signatures and calls also after
                                  *args and **kwargs. Deprecated; use
                                  --target-version instead. [default: per-file
                                  auto-detection]
  --pyi                           Format all input files like typing stubs
                                  regardless of file extension (useful when
                                  piping source on standard input).
  -S, --skip-string-normalization
                                  Don't normalize string quotes or prefixes.
  --check                         Don't write the files back, just return the
                                  status.  Return code 0 means nothing would
                                  change.  Return code 1 means some files
                                  would be reformatted.  Return code 123 means
                                  there was an internal error.
  --diff                          Don't write the files back, just output a
                                  diff for each file on stdout.
  --fast / --safe                 If --fast given, skip temporary sanity
                                  checks. [default: --safe]
  --include TEXT                  A regular expression that matches files and
                                  directories that should be included on
                                  recursive searches.  An empty value means
                                  all files are included regardless of the
                                  name.  Use forward slashes for directories
                                  on all platforms (Windows, too).  Exclusions
                                  are calculated first, inclusions later.
                                  [default: \.pyi?$]
  --exclude TEXT                  A regular expression that matches files and
                                  directories that should be excluded on
                                  recursive searches.  An empty value means no
                                  paths are excluded. Use forward slashes for
                                  directories on all platforms (Windows, too).
                                  Exclusions are calculated first, inclusions
                                  later.  [default: /(\.eggs|\.git|\.hg|\.mypy
                                  _cache|\.nox|\.tox|\.venv|_build|buck-
                                  out|build|dist)/]
  -q, --quiet                     Don't emit non-error messages to stderr.
                                  Errors are still emitted, silence those with
                                  2>/dev/null.
  -v, --verbose                   Also emit messages to stderr about files
                                  that were not changed or were ignored due to
                                  --exclude=.
  --version                       Show the version and exit.
  --config PATH                   Read configuration from PATH.
  -h, --help                      Show this message and exit.
3

看起来是这样的:code style:black

许可证

麻省理工学院< /P>

有助于黑色

就灵感而言,黑色gofmt一样可配置。 这是故意的。

错误报告和修复总是受欢迎的!但是,在你建议 新功能或配置旋钮,问自己为什么要。如果它 能够更好地与某些工作流集成,修复不一致性, 加快速度,等等-去吧!另一方面,如果 答案是"因为我不喜欢特定的格式",那么你就不是 准备好拥抱黑色了。这种变化不大可能被接受。 你仍然可以尝试,但要做好失望的准备。

有关详细信息,请参见贡献

更改日志

未发布

  • 添加了black-c以格式化从命令行传递的代码 (α761)

  • --safe现在可以使用python 2代码(840)

  • 修正了python 2特定代码(765)的语法选择

  • 函数定义中尾随逗号的固定特征检测 以及呼叫站点(763)

  • 黑色现在可以格式化异步生成器(593)

  • 黑色不再在具有超过61核的Windows计算机上崩溃 (α838)

  • 黑色不再在以 反斜杠(767)

  • 黑色不再在中的上崩溃…导入带注释的块 (α829)

  • 删除了yield表达式(834)周围不必要的括号

  • 在解包赋值(832)中在长元组周围添加括号

  • 修正了用一个行长度目标格式化一些代码的错误 第1页(762)

  • 黑色不再在字符串上的f-string子表达式中引入引号 边界(863)

  • 如果black在单个表达式周围放置括号,则它将移动注释 到包装表达式,而不是括号(872)

  • black现在能够格式化使用赋值表达式的python代码 (:=如PEP-572所述)(935)

  • black现在能够格式化仅使用位置的python代码 参数(/如PEP-570所述)(946)

19.3b0

  • 新选项。--目标版本以控制哪些python版本 黑色-格式化的代码应以(618)为目标

  • 已弃用--py36(改用--target version=py36)(724)

  • 黑色不再规范化数字文本以包括分隔符(696)

  • longdel语句现在被分成多行(698)

  • 类型注释不再在函数签名中损坏

  • 提高格式化深度嵌套数据结构的性能(509)

  • 黑色现在可以正确地并行设置多个文件的格式 窗户(632)

  • black现在自动创建允许使用的缓存文件 在并行管道中(如xargs-p8)(673)

  • 黑色现在可以正确缩进以前文件中的注释 用制表符格式化(262)

  • blackd现在支持cors(622)

18.9b0

  • 数字文本现在的格式为黑色(452,461,464,469):

    • 在Python3.6+代码中,数字文本被规范化为包含分隔符

    • 添加了"跳过数字下划线规范化"以禁用上述行为和 在输入中保留数字下划线

    • 带有数字文本的代码被识别为Python3.6+

    • 数字文本中的大多数字母都是小写的(例如,in1e100x01

    • 十六进制数字始终大写(例如0xbadc0de

  • 添加了blackd,有关详细信息,请参见其文档

  • 相邻的字符串文字现在正确地分割成多行(463)

  • 尾部逗号现在添加到不适合行(250)的单个导入中

  • 当文件的--check成功时,缓存将被填充 连续检查格式正确的未修改文件(448)

  • 现在删除文件开头的空白(399)

  • 固定损坏 Spyder IDE特别评论(532)

  • 修复了解包大元组时格式不稳定的问题(267)

  • 修正了使用重命名(389)对导入进行解析的问题

  • 当直接位于yield和其他节点(385)之前时,fmt:off的固定范围

  • 修正了带有默认参数的lambda表达式的格式(468)

  • 修正了异步for语句:黑色不再将它们分开 线条(372)

  • 注意:vim插件停止将,=注册为默认和弦 坏主意(415)

18.6 b4

  • 修补程序:当多个注释直接位于(371)

18.6立方米

  • 键入存根文件(.pyi)后,常量(340)后面将添加空行

  • fmt:offfmt:on现在更加可靠:

    • 它们现在也可以在括号对(329)中工作

    • 它们现在可以跨函数/类边界(335)正确工作了

    • 当缩进块以空行或未对齐开始时,它们现在可以工作 评论(334)

  • 使单击在无效环境中不会失败;请注意,单击是正确的,但是 在处理python源代码时,我们可能需要访问非ascii文件路径 代码低(277)

  • 修正了f-s格式的错误内插引号的字符串 表达式(322)

  • 修复了在文件中找到长列表文本时不必要的减速问题

  • 修复了具有许多同级节点的ast节点上不必要的减速问题

  • 修复了在字符串规范化期间对反斜杠的破坏

  • 修复了由于指向项目目录(338)外部的符号链接而导致的崩溃。

18.6平方

  • 添加了--config(65)

  • 添加了等同于"帮助"的-h(316)

  • 修正了使用-s时未经修改的不正确文件缓存

  • 修复了字符串解包中的额外空间(305)

  • 修复了空三引号字符串的格式设置(313)

  • 修正了在没有 评论

18.6亿1

  • 修补程序:不要在stdout上输出面向人的信息(299)

  • 修补程序:不在非零返回码(300)上输出cake emoji

18.6百

  • 添加了--include--exclude(270)

  • 添加了--跳过字符串规范化(118)

  • 添加了--verbose(283)

  • --diff中的头输出现在实际上符合统一的diff规范

  • 修正了不必要的括号(273)中包含的冗长琐碎的作业

  • 修正了当一行包含多行字符串(232)时不必要的括号

  • 修复了如果旧版本的click是 使用(276)

  • 黑色现在在原地格式化文件时保留行尾(258)

18.5b1

  • 添加了--pyi(249)

  • 添加了--py36(249)

  • python语法pickle缓存与格式化缓存一起存储,使 黑色适用于站点包不可由用户写入的环境(192)

  • 黑色现在在类级docstring之后强制执行pep 257空行 (和/或字段)和第一个方法

  • 修复了拖车中存在独立注释时生成的无效代码 在一个大表达式(237)上的行拆分中省略了这个值

  • 修正了在fmt:off部分(224)

  • 修复了当很长的导入中的星不正确时产生的无效代码 包装在可选括号中(234)

  • 修复了内联注释在中移动时不稳定的格式 在一个大表达式的行拆分中省略的尾部 (α238)

  • 修复了类声明和第一个声明之间的多余空行 方法,如果不存在类docstring或字段(219)

  • 修复了函数签名和内部签名之间的多余空行 函数或内部类(196)

18.5百

  • 调用链现在根据 流畅的界面 款式(67)

  • 数据结构文本(元组、列表、字典和集合)是 现在也总是像进口产品一样爆炸式增长 行(152)

  • 切片现在根据PEP 8(178)格式化

  • 括号现在也在右侧自动管理 作业和报表的数量(140)

  • 数学运算符现在使用它们各自的优先级来划分多行 表达式(148)

  • 现在在开始或结束的表达式中省略了可选括号 带括号且仅包含一个运算符(177)

  • 类定义中的空括号现在被删除(145,180)

    <理>
  • 字符串前缀现在标准化为小写,并删除了u 在python 3.6+代码和python 2.7+代码中使用unicode文本 未来进口(188,198,199)

  • 输入存根文件(.pyi)的格式现在是一致的 使用PEP 484(207,210)

  • 现在将以增量方式报告重新格式化多个文件时的进度

  • 固定拖车(含支架)不必要地爆炸 在一个凹形的右括号(119)后面插入它们自己的行中

  • 修复了导入中有时留下的无效尾随逗号(185)

  • 修复了多对可移动括号时的不确定格式 使用(183)

  • 修复了不必要地将多行字符串包装为可选的 长作业中的括号(215)

  • 修复了只使用一个名称不从导入中拆分long的问题

  • 修复了python 3.6+文件发现问题,方法是使用 打开包装。此修复了尾随逗号时的不确定格式 在带有星型和函数调用的函数签名中使用 使用星号,但前者将被重新格式化为一行。

  • 修复了处理可选括号(193)时的崩溃问题

  • 固定的"is"、"is not"、"in"和"not in"不被认为是 拆分目的

  • 修复了遇到死符号链接时的崩溃

18.4A4

  • 不要在--check(175)上填充缓存

18.4A3

  • 添加了"缓存";磁盘上尚未更改的文件已重新格式化 不会重新格式化(109)

  • --check--diff不再互斥(149)

  • 广义星表达式处理,包括双星;这个 修正了乘法使表达式"不安全"的尾随逗号(132)

  • 黑色不再强制在控制流语句后面放置空行 (α90)

  • 黑色现在拆分导入,如isort(127)的"mode 3+trailing comma"

  • 修复了独立注释关闭块时的注释缩进(16,32)

  • 修复了在紧接着前面时接收额外空行的独立注释 类、定义或装饰符(56,154)

  • 修正了不显示整个路径(130)的差异

  • 修正了 函数调用(2)

  • 修正了lambda参数(133)中逗号的无效拆分

  • 修复了三元表达式(141)缺少拆分的问题

18.4A2

  • 修复了未对齐的独立注释的解析(99,112)

  • 固定字典解包在字典文本中的位置(111)

  • vim插件现在也可以在windows上工作了

  • 修复了遇到不必要的转义引号时格式不稳定的问题 字符串(120)

18.4A1

  • 添加了--quiet(78)

  • 添加了自动括号管理(4)

  • 添加了预提交集成(103,104)

  • 修正了使用多个文件(101,102)检查时的报告问题

  • 修复了从原始字符串中删除反斜杠转义(100,105)

18.4a0

  • 添加了--diff(87)

  • 在所有分隔符之前添加换行符(逗号除外) 更好地遵守PEP 8(73)

  • 标准化字符串文本以在任何地方(几乎)使用双引号 (α75)

  • 固定处理嵌套括号内的独立注释 表达式;黑色将不再产生super排长队还是全力以赴 表达式末尾的独立注释(22)

  • 修正18.3A4回归:不要在空行上碰撞和燃烧 尾随空白(80)

  • 修正了18.3A4回归:yapf:disable用作尾随注释 会导致黑色不会发出文件的其余部分(95)

  • 当格式化许多文件时按下ctrl+c时,黑色不再 由于一连串与异步相关的异常而抓狂

  • 在模块级最多允许两个空行,而只有一个空行 函数内的行(74)

18.3A4

  • fmt:offfmt:on已实现(5)

  • 自动检测不推荐使用的python 2打印语句 格式化文件中的exec语句(49)

  • 在类型的默认值中为复杂表达式使用适当的空格 函数参数(60)

  • 仅当使用--check(50)时返回退出代码1

  • 不要从方括号索引中删除单个尾随逗号 (α59)

  • 如果前面的factor leaf不是一个数学表达式,不要省略空白 操作员(55)

  • 如果是第一个参数(46),则在Kwarg解包中省略多余的空格

  • 省略sphinx auto attribute注释中的多余空间 (α68)

18.3A3

  • 不要删除括号表达式外的单个空行 (α19)

  • 增加了从stdin到stdin的管道格式设置功能(25)

  • 恢复了使用async作为 姓名(20,42)

  • 更好地处理numpy样式的数组索引(33,再一次)

18.3A2

18.3A1

18.3a0

作者

ukasz langa粘合在一起

由卡罗尔自愿维护, 卡尔•迈耶jelle zijlstramika naylor,以及 zsolt多伦斯坦

多重贡献:

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Grails2.1.0/Java7在Windows8.1上从何处获取当前用户名?   JavaSpringJMSActiveMQ   java异常处理,捕获导致while循环停止   sql server 2008将日期时间解析为JAVA日期   java是第一个servlet,但无法打开它   如何在Java中使用XML bean创建典型的XML头?   java将iOs应用程序转换为Android   java将jsp页面内容读取到其他jsp页面中的html   客户端计算机中小型数据库应用程序的java实现   java同步和ServletContextListener   安卓 Java将所有转义字符替换为双转义   当我在布局单元中实现ScrollView时,java GridView的setOnItemLongClickListener不起作用(使用适配器)   禁用Java web服务端点Wsdl   java如何编写一个程序来反转用户输入的数字