格式化器黑在我的VSCode上不起作用...但为什么?

58

我已经开始使用Python和Django,对这个领域非常新手。 而且,这是我第一次在这里提问...如果这个问题有已知的解决方案,我提前道歉...

当我安装并设置VSCode格式化工具'black'(在设置了linter为flake8之后),教程视频中出现了一个弹出窗口,显示'formatter autopep8未安装。要安装吗?'。而我的电脑上没有出现这个消息。

所以我做的是...

  1. 在终端上手动输入'pipenv install flake8 --dev --pre'。

  2. 在'.vscode'文件夹下的'settings.json'中手动输入"python.formatting.provider": "black"。

  3. 设置(VSCode) -> flake8, Python > Linting: Flake8 Enabled(也在workspace中进行了修改),勾选 Whether to lint Python files using flake8

以下是来自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
}

我找到了一个名为'black formatter'的文档。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.


是的,老实说,我不确定应该设置哪个源文件或目录...但最重要的是,现在我担心自己是否走在正确的轨道上。
能听听你的建议吗?至少给我一些方向,谢谢。

哇...我想现在我部分地明白了这里每个帖子的情况。谢谢大家的帮助!保重! - mireumireu
这是一个固定的链接- https://stackoverflow.com/questions/57750880/vs-code-autoformats-python-code-to-use-2-tabs/57751169#57751169 - undefined
21个回答

3

可能您的默认格式化程序存在冲突,只需在VSC中的“打开用户设置”中添加"[python]": { "editor.defaultFormatter": null }即可。

"editor.formatOnSave": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "python.formatting.provider": "black",
  "[python]": { "editor.defaultFormatter": null }

是的,在 Python 中设置默认格式化程序可能会影响到其他格式化程序。尽管所有其他设置都正确,但这仍会使我陷入困境。 - renderbox

2

当在 VS Code 中运行时,black 可能停止工作的另一个原因是您可能已经开始使用 Python 3.10。

如果使用了新功能(如结构模式匹配),则 Black 将失败。VS Code 会默默地失败,没有任何格式化发生。看起来 black 没有工作。

尝试从命令行中运行 black,以查看是否有错误消息。

这就是我得到的:

$ black my_code.py 
error: cannot format my_code.py: Cannot parse: 57:14:         match rec.split():
Consider using --target-version py310 to parse Python 3.10 code.
Oh no!   
1 file failed to reformat.

我不得不在VS Code的blackArgs中添加--target-version=py310,就像这样:

"python.formatting.blackArgs": ["--target-version=py310"]

请注意等号(=)符号。

2

对我来说,问题并不是直接与 Black 有关,而是一个无效的项目设置文件,它读取以查找配置设置。根本原因没有被记录在任何地方。

我通过选中 Python 扩展并检查 OUTPUT 选项卡来找到了原因。它显示 Black 被调用,并且似乎没有报告任何问题:

./.venv/bin/python -m black --diff --quiet ./myfile.py
cwd: .

然而,当我在终端中运行相同的命令时,出现了错误报告:
Error: Could not open file './pyproject.toml': Error reading configuration file: Invalid value (at line 18, column 10)

这个问题解决后,我可以手动格式化我的代码,并且“保存时格式化”功能也恢复了。


2
在我的情况下,我不小心卸载了 black 的一个依赖项 mypy-extensions。Vscode 没有在 UI 或输出日志中显示错误。尝试使用 pip install black --force-reinstall 重新安装 black。

2

1

这对我来说是一个具有挑战性的问题。我甚至重新安装了我的VSCode和Black-Formatter好几次。 最终,我使用以下方法找到了问题。在VSCode中点击OUTOUT,从下拉菜单中选择Black-Formatter。在日志中,您将看到问题(如下面的屏幕截图所示)。对我来说,问题在于我在我的.gitignore文件中有以下项目。禁用最后两个项目解决了我的问题(仍然不明白它为什么会破坏黑色格式化程序)

__pycache__/
*/__pycache__/
*\__pycache__\

enter image description here


1

如果您正在使用Windows操作系统,则有一个最简单的解决方案:

  1. 找出您安装黑色包的位置。它可以在 AppData/python/scripts 中。
  2. 点击开始菜单并键入"编辑系统环境变量",然后选择它。
  3. 现在点击环境变量并双击'path''系统变量'部分进行编辑。
  4. 现在在此处添加包路径,例如"Appdata/path/scripts;"

希望现在黑色包在每次保存时都能正常工作。

这个解决方案对我来说很有效。

注意:现在您可以从CLI中使用黑色包。


感谢您回答这个问题!保持安全! - mireumireu

1

这个问题里的所有方法都没对我的黑色主题生效。我放弃了,改成了在"设置"中的"UI"下使用autopep8作为默认格式化器,然后一切正常了。


0
根据上面的答案(检查输出中的日志),我找到了以下的信息:
[info] Formatting requested before server has started.

解决方案是按下CTRL+SHIFT+P并执行命令。
BlackFormatter: Restart Server

-2

通过调用“格式化文档”操作(ctrl+shift+p)检查格式化程序是否正确配置。这将提示我选择格式化程序的消息。之后一切都按预期工作。

format document


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