【问题标题】:Python black formatter for vscode not formattingvscode的Python黑色格式化程序不格式化
【发布时间】:2021-03-20 01:05:45
【问题描述】:

我正在尝试在 Ubuntu 20.04 上的 VS Code 上将 black as a formatter 用于 Python,但它不能用于自动保存。

我在Python>Formatting:Provider 中选择了black。我使用 prettier 作为我的默认格式化程序,为此我添加了一个 .prettierignore、禁用和卸载以确保它不会干扰黑色。我还向./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 可能是错误的目录(可能是当前工作区的目录)。开头真的有.吗?
  • @GinoMempin 我编辑了这个问题。在我更改路径之前,默认值为path,它正在工作。但这不应该是这里的问题。 ./local/bin/black 仍然执行黑色。
  • 在 VS Code 上,打开输出选项卡(通常在底部面板上)并从下拉列表中选择 Python。你有没有看到任何关于黑色的消息?
  • 仅从 pylint 输出。

标签: visual-studio-code python-black


【解决方案1】:

您只需要在 VS Code 上 setup black as a formatter 进行一些设置。看来你大部分都做对了,但我对使用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)。不要为所有内容设置默认值,而是为 each 语言和 each 扩展名配置格式化程序。在这里,它是空的,然后我配置python 特定的设置(然后我有单独的 JS 和 C++ 设置)。你提到了一些关于 Prettier 的事情,这可能会干扰使用黑色的 VS Code。

其次,确保您正在修改正确的设置。 VS Code 有 3 sets of settings:User、Workspace 和 Folder。我通常在 User 设置中为 Python 启用 formatOnSave,并将 provider 设置为 black(使用系统范围内安装的 black)。在特定的工作空间中,我有一个虚拟环境,我将blackPath 覆盖为专门安装在该虚拟环境上的black。您也可以将所有设置放在 User 设置中或使用相同的系统范围安装的black。但这里的要点是对两者都使用绝对路径(基本上是从控制台复制which black 的输出)。

请注意,如果您指定 blackPath 指向特定的虚拟环境,请确保在您的工作区中使用 select that same virtual environment。

最后,您可以从“输出”选项卡 > Python 检查是否有任何问题:

【讨论】:

  • 谢谢。 home/<usr_name>/.local/bin/black 工作。我会听取你对默认格式化程序的建议。
  • 我无法让行长正常工作。例如,我放了 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 这可能取决于被格式化的行,因为 black code style mentions 表示 "Black 会尝试尊重这一点。但是,有时它会在不破坏其他的情况下无法做到具体问题。
  • @GinoMempin 谢谢,你是对的。它尊重我关于方法链或长字符串的规则,但在元组上它有自己的规则。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
  • 2023-04-10
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-30
相关资源
最近更新 更多