Formatter black 不适用于我的 VSCode ......但为什么呢?

mir*_*ght 4 python visual-studio-code python-black

我已经开始使用 Python 和 Django,我在这个领域很新。这是我第一次在这里提问……如果有已知的解决方案,我会提前道歉……

当我安装并设置 VSCode 格式化程序“黑色”(将 linter 设置为 flake8 之后)时,教程视频导师的一面会弹出类似“未安装格式化程序 autopep8”的弹出窗口。安装?'。& 我的没有显示该消息。

所以我所做的是...

  1. 在终端上手动输入“pipenv install flack --dev --pre”。
  2. 手动输入“python.formatting.provider”:“black”,到“.vscode”文件夹上的“settings.json”。
  3. Setting(VSCode) -> flake8, Python > Linting: Flake8 Enabled (Also modified in: workspace), (打勾) 是否使用 flake8 lint Python 文件

底部代码来自 settings.json(在 vscode 文件夹中)。


{
  "python.linting.pylintEnabled": false,
  "python.linting.flake8Enabled": true,
  "python.linting.enabled": true,
  "python.formatting.provider": "black", # input manually
  "python.linting.flake8Args": ["--max-line-length=88"] # input manually
}


Run Code Online (Sandbox Code Playgroud)

我找到了一个“黑色格式化程序”文档。https://github.com/psf/black & 它说... python -m black {source_file_or_directory} & 我收到以下错误消息。


    Usage: __main__.py [OPTIONS] [SRC]...
Try '__main__.py -h' for help.

Error: Invalid value for '[SRC]...': Path '{source_file_or_directory}' does not exist.

Run Code Online (Sandbox Code Playgroud)

是的,老实说,我不确定我应该设置哪个 source_file_or_directory ......但最重要的是现在我担心我是否在正确的轨道上。

我能听听你的建议吗?至少有一些方向,请。谢谢..

abn*_*erl 56

2024/02/19 更新

之前的解决方案不再适用。

有两个问题:

  1. vscode 有新的官方扩展
  2. vscode 扩展的黑色输出和 python 虚拟环境中的黑色不同

如果您只想使用“黑色”格式化程序并且不关心问题#2。只需安装 vscode 黑色扩展即可

在此输入图像描述

我修改了问题#2
a 的解决方案。首先安装黑色扩展
b. 设置虚拟环境,安装 black init 并将项目解释器设置为它
c. 转到用户设置,在虚拟环境中将 Black-formatter: Path 设置为“black”

"black-formatter.path": ["black"]
Run Code Online (Sandbox Code Playgroud)

注意:在您需要的python环境中安装'black',删除全局'black'

=====旧 vscode 的过时解决方案=====
为那些仍然无法解决 VS Code 中的黑色格式问题的人附上我的发现。

首先,您必须全局或本地安装 Black(如果您使用像 conda 这样的虚拟环境)。

然后,确保您的 VS 设置如下,将 python 默认格式化程序提供程序设置为“black”:

在此输入图像描述

最后,打开settings.jsonVS Code,为其添加以下部分。

"[python]": {
    "editor.defaultFormatter": null,
    "editor.insertSpaces": true,
    "editor.tabSize": 4,
    "editor.formatOnSave": true
}
Run Code Online (Sandbox Code Playgroud)

关键点是:

"editor.defaultFormatter": null
Run Code Online (Sandbox Code Playgroud)

如果您仍然按照许多旧帖子的建议使用"editor.defaultFormatter": "black",则 Black 格式化程序将无法在较新的 VS Code 中工作。

  • 谢谢!这为我解决了这个问题: "editor.defaultFormatter": null (7认同)
  • 这也对我有用,其他的都没有 (4认同)

noc*_*mbi 12

对于那些已经尝试过这一切的人:)。

如果您有,黑色将无法在 VSCode 中工作

  • 语法错误,
  • IPython 魔法(例如%matplotlib inline)。

从终端上运行黑色文件揭示了这些问题。


max*_*ehl 9

就像 camab 所说,你完全可以从命令行运行它:

$ black file.py
Run Code Online (Sandbox Code Playgroud)

您还可以在 python 文件的整个文件夹(目录)上运行它:

例如,如果我有:

src/
| - module/
|   | - moduleFile.py
|   \ - __init__.py
|
\ - script.py
Run Code Online (Sandbox Code Playgroud)

并运行

$ black src
Run Code Online (Sandbox Code Playgroud)

它将格式化moduleFile.py__init__.py、 和script.py

就你的 VSCode 配置而言,我也喜欢settings.json

$ black file.py
Run Code Online (Sandbox Code Playgroud)

确保每次我按“保存”时,文件都会被检查和格式化。

如果您在 VSCode 中遇到 linting/formatting 问题,您可以使用“命令面板”(Ctrl+Shift+P) 强制执行以下命令:

  • Python:运行 Linting
  • Python:选择 Linter
  • 格式化文档
  • 设置文档格式...

如果确实存在问题,这应该会产生视觉弹出式错误。

希望这对您有所帮助,祝您编码愉快!


nev*_*ves 9

我从 VSCode 内部使用黑色,它很摇滚。如果您需要一次格式化大量文件,只需从命令行运行。

首先,检查 settings.json 中是否有这个:

"python.formatting.provider": "black",
"editor.formatOnSave": true,
Run Code Online (Sandbox Code Playgroud)

请记住,可能有 2 个 setting.json 文件:一个在您的主目录中,一个在您的项目 ( .vscode/settings.json) 中。项目内部的那个占上风。

也就是说,这类问题通常与使用未安装 black 的 python 解释器有关。我推荐使用虚拟环境,但首先在状态栏上检查你的python解释器:

VSCode 状态栏中的 Python 解释器

如果您没有明确选择解释器,请立即单击状态栏中的 Python 版本。所选路径现在将出现在您的设置文件中:

"python.pythonPath": "Scripts\\python.exe",
Run Code Online (Sandbox Code Playgroud)

现在打开终端。既然你选择了解释器,你的虚拟环境应该会被 VSCode 自动激活。运行 python 并尝试导入 black:

$ python
Python 3.7.3 (default, Mar 27 2019, 22:11:17) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import black
>>> 
Run Code Online (Sandbox Code Playgroud)

导入失败?问题解决了。只需使用来自 venv 的解释器安装 black: python -m pip install black

还是行不通?单击 TERMINAL 的“输出”选项卡兄弟并尝试在“日志”输出中获取更多信息。在下拉菜单中选择它:

vscode的日志输出

  • 对我来说,检查输出“Python”日志很有用。调用“格式化文档”时,“日志(主)”不包含任何信息。 (6认同)

Cen*_*tAu 9

对于那些看到这个并且上述解决方案都不起作用的人。如果将黑色路径设置为其绝对位置,则可能会解决问题。

在此输入图像描述

  • 在其他答案不起作用之后,这对我有用。 (3认同)

Mar*_*ark 9

有一个新的扩展,目前已预发布,用于黑色格式化。请参阅v1.67 发行说明、Python Black 格式

从自述文件(vscode Marketplace:Black Formatter):

用法

一旦安装在 Visual Studio Code 中,“Black Formatter”将可用作 python 文件的格式化程序。请选择“Black Formatter”(扩展名:ms-python.black-formatter)作为默认格式化程序。您可以通过使用上下文菜单(右键单击编辑器中打开的 python 文件)并选择“使用以下格式设置文档格式”来执行此操作,也可以将以下内容添加到您的设置中:

  "[python]": {
    "editor.defaultFormatter": "ms-python.black-formatter"
  }
Run Code Online (Sandbox Code Playgroud)

保存时格式化

您可以通过在设置中设置以下值来启用 python 的保存格式:

  "[python]": {
    "editor.defaultFormatter": "ms-python.black-formatter",
    "editor.formatOnSave": true
  }
Run Code Online (Sandbox Code Playgroud)


小智 5

另一种可能性是您添加了格式不正确的黑色参数。该插件希望每个以空格分隔的选项都作为它自己的“项目”添加到设置 UI 中,如下所示: 黑色参数设置

您应该能够看到参数正确传递到输出->Python 控制台,如下所示: 好黑指挥

应该看起来像这样:

糟糕的黑色命令


小智 5

您可以将Black 扩展安装到VSCode,如下所示。*我在 Windows 11 上使用Anaconda :

在此输入图像描述

然后,将下面的代码设置为settings.json。*您可以看到我的回答解释如何打开settings.json

// "settings.json"

"[python]": {
    "editor.defaultFormatter": "ms-python.black-formatter",
    "editor.formatOnSave": true
}
Run Code Online (Sandbox Code Playgroud)

下面是我settings.json上面的代码的完整内容:

// "settings.json"

{
    "python.defaultInterpreterPath": "C:\\Users\\kai\\anaconda3\\python.exe",
    "window.zoomLevel": 3,
    "files.autoSave": "afterDelay",
    "breadcrumbs.enabled": false,
    "[python]": { // Here
        "editor.defaultFormatter": "ms-python.black-formatter",
        "editor.formatOnSave": true
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,此扩展*默认使用它自己的**捆绑版本** Black。要强制它使用环境中的黑色可执行文件,请使用“black-formatter.importStrategy”:“fromEnvironment”。 (2认同)