Python黑色格式化程序在VSCode中没有格式化

13

我正在尝试在Ubuntu 20.04上的VS Code中使用Python的黑色格式化程序,但它无法在自动保存时正常工作。我已经在Python> Formatting: Provider中选择了black。我使用prettier作为默认格式化程序,并添加了一个.prettierignore文件,禁用并卸载了它,以确保它不会干扰black。我还添加了自定义路径到./local/bin/black。当我通过终端运行它时,它可以正常工作。如何让它正常工作?

{
  editor.defaultFormatter": "esbenp.prettier-vscode",
  "editor.formatOnSave": true,
  "python.formatting.provider": "black",
  "python.formatting.blackArgs": [
    "-l 120"
  ],
  "editor.formatOnType": true,
  "python.formatting.blackPath": "./local/bin/black"
}

你能否发布一下你的 settings.json 中关于 python.formatting.* 的内容?此外,./local/bin/black 可能是错误的目录(可能是当前工作区的目录)。开头真的有一个 . 吗? - Gino Mempin
@GinoMempin 我编辑了问题。在我更改路径之前,默认值为 path,这是有效的。但这不应该是问题所在。./local/bin/black 仍然可以执行 black。 - VectorXY
在 VS Code 上,打开输出选项卡(通常在底部面板上),然后从下拉菜单中选择 Python。您是否看到有关 black 的任何消息? - Gino Mempin
仅限于pylint的输出。 - VectorXY
6个回答

15

您只需要在VS Code上进行几项设置,即可将black设置为格式化程序。看起来您已经做得很好了,但我对使用相对路径的blackPath持怀疑态度(如果路径确实不正确,VS Code应该会显示错误)。

我建议切换到绝对路径。

以下是我的设置:

// User Settings

"editor.defaultFormatter": null,
"editor.formatOnSave": false,  // enable per language
"[python]": {
    "editor.formatOnSave": true
},
"python.formatting.provider": "black",
"python.formatting.blackPath": "/usr/local/bin/black"

// Workspace Settings

"python.formatting.blackPath": "/absolute/path/to/venv/with/black",
"python.formatting.blackArgs": [
    "-l 120"
],

首先,我建议取消editor.defaultFormatter设置(或将其设置回默认值null)。不要为所有内容设置默认值,而是为每种语言和每个扩展配置格式化程序。在这里,它是null,然后我配置了python特定的设置,然后我有单独的其他语言设置(例如JS和C ++)。你提到了Prettier,这可能会干扰VS Code使用black。
第二,请确保您正在修改正确的设置。VS Code有3组设置UserWorkspaceFolder。我通常在User设置中启用formatOnSave以供Python使用,并将provider设置为black(使用系统范围内安装的black)。在特定的工作区中,我有一个虚拟环境,我覆盖了blackPath以使用该虚拟环境中专门安装的black。您也可以将所有设置放在User设置中,或者使用相同的系统范围内安装的black。但是这里的主要问题是同时使用绝对路径(基本上从控制台复制which black的输出)。
请注意,如果您指定了blackPath指向特定的虚拟环境,请确保在您的工作区中选择相同的虚拟环境
最后,您可以从输出选项卡> Python检查任何问题。

VS Code screenshot of Output


1
谢谢。home/<usr_name>/.local/bin/black 可以使用。我会采纳你的建议,使用默认格式化程序。 - VectorXY
我无法让行长度起作用。例如,我设置为500,但它仍然按默认长度(80、90或其他长度)进行操作。在终端(输出选项卡)中,我得到了~\Desktop\fastapi_training\myenv\Scripts\black --line-length 500 --diff --quiet ~\Desktop\fastapi_training\postgre_sql_app\crud.py cwd: ~\Desktop\fastapi_training - elano7
1
@elano7 这可能取决于正在格式化的行,因为黑色代码风格提到:“Black将尝试尊重它。但是,有时它无法这样做而不违反其他规则。”我建议在VS Code之外尝试它(例如执行black -l 500 file.py),以查看它是黑色问题还是VS Code问题,然后针对该特定问题发布一个单独的问题。 - Gino Mempin
@GinoMempin 谢谢,你是对的。它尊重我的方法链接或长字符串的规则,但在元组上有自己的规则。 - elano7

1

对于那些已经到达这一步但仍然没有找到答案并尝试了多种解决方案的人,包括安装Microsoft黑色格式化程序扩展:

  • 禁用它
  • 将以下内容添加到您的用户设置和工作区设置中:
    "python.formatting.provider": "black",
    "editor.formatOnSave": true,
    "python.linting.lintOnSave": true,
    "[python]": {
        "editor.defaultFormatter": null,
        "editor.insertSpaces": true,
        "editor.tabSize": 4,
        "editor.formatOnSave": true
    },


1
我也遇到了这个问题。解决方法是下载Black格式化扩展,打开文档后用鼠标右键点击,然后选择“格式化文档”。选择黑色主题即可。之后就再也没有出现过问题了。

1
如果你已经将默认格式设置为黑色,但它仍然无效,可以尝试在Python中添加"editor.defaultFormatter"。如果你右键点击 => 格式化文档 => 选择默认格式化程序,也会创建这一行。
{
    "black-formatter.importStrategy": "fromEnvironment",
    "editor.formatOnSave": true,
    "[python]": {
        "editor.defaultFormatter": "ms-python.black-formatter", #1 try adding this
    },
    "editor.defaultFormatter": "ms-python.black-formatter" #2 this did nothing on Save
}
p/s: 我正在使用VSCode Windows版本1.84.0

"ms-python.black-formatter"对我来说起作用了!谢谢! - undefined

0

对我来说,这是因为在黑色参数中有一个无效的参数。


0

我的 VSCode 版本是 Version: 1.72.2。我使用 Anaconda 安装了 Python 3.10,在 conda 中安装的 black 版本是 19.10b0

我已经在 VSCode 的 settings.json 文件中配置了 "python.formatting.provider": "black",但 black 没有格式化。

一旦我手动更新 black 到 22.10.0,格式化就能正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接