簡體   English   中英

Formatter black 在我的 VSCode 上不起作用......但為什么呢?

[英]Formatter black is not working on my VSCode...but why?

我已經開始使用 Python 和 Django,我是這個領域的新手。 這是我第一次在這里提問...如果有已知的解決方案,我會提前道歉...

當我安裝並設置 VSCode 格式化程序“black”(將 linter 設置為 flake8 之后)時,教程視頻導師端顯示彈出窗口,如“未安裝格式化程序 autopep8”。 安裝?'。 & Mine 沒有顯示該消息。

所以我所做的是...

  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
}


我找到了一個“黑色格式化程序”文檔。 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.

是的,老實說,我不確定我應該設置哪個 source_file_or_directory...但最重要的是現在我擔心我是否在正確的軌道上。

我能聽聽你的建議嗎? 請至少指示 go。 謝謝..

我在 VSCode 內部使用黑色,它很震撼。 它釋放了您決定如何格式化代碼的心理周期。 最好從您最喜歡的編輯器中使用它。 如果您需要一次格式化大量文件,只需從命令行運行。

首先,檢查你的 VSCode settings.json中是否有這個。json(使用 Ctrl-P + 設置打開它):

"python.formatting.provider": "black",
"editor.formatOnSave": true,

請記住,可能有 2 個 setting.json 文件:一個在您的主目錄中,一個在您的項目中( .vscode/settings.json )。 項目內部的占上風。

也就是說,這類問題通常與使用未安裝黑色的 python 解釋器有關。 我推薦使用虛擬環境,但首先在狀態欄上檢查你的 python 解釋器:

VSCode 狀態欄中的 Python 解釋器

如果您沒有明確地 select 解釋器,請現在單擊狀態欄中的 Python 版本。 用於出現在項目設置文件中的選定路徑:

"python.pythonPath": "Scripts\\python.exe",

但我認為它不再出現了。

現在打開終端。 由於您選擇了解釋器,因此 VSCode 應該會自動激活您的虛擬環境。 使用您的解釋器路徑運行 python 並嘗試導入黑色:

$ 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
>>> 

導入失敗? 問題解決了。 只需使用 venv 的解釋器安裝 black: python -m pip install black

還是行不通? 單擊終端的“輸出”選項卡兄弟並嘗試在“日志”output 中獲取更多信息。 Select 它在下拉菜單中:

vscode的日志輸出

附上我對那些仍然無法解決 vs code 中“黑色”格式問題的人的發現。

首先,您必須在全局或本地安裝 black(如果您使用 conda 之類的虛擬環境)

然后,確保您的 vs 設置如下,將 python 默認格式化程序提供程序設置為“黑色”: 在此處輸入圖像描述

最后,打開你的vs代碼的settings.json,為其添加以下段。

"[python]": {
    "editor.defaultFormatter": null,
    "editor.insertSpaces": true,
    "editor.tabSize": 4,
    "editor.formatOnSave": true
}

關鍵點是:

"editor.defaultFormatter": null

如果您仍然使用"editor.defaultFormatter": "black"作為許多舊帖子,則 'black' 格式化程序將無法在較新的 vs 代碼中工作。

對於那些已經嘗試過的人:)。

如果您有黑色將無法在 VSCode 中使用

  • 語法錯誤,
  • 一個 IPython 魔法(例如%matplotlib inline )。

從文件上的終端運行黑色顯示了這些問題。

就像 camab 說的,你完全可以從命令行運行它:

$ black file.py

您還可以在 python 文件的整個文件夾(目錄)上運行它:

例如,如果我有:

src/
| - module/
|   | - moduleFile.py
|   \ - __init__.py
|
\ - script.py

並運行

$ black src

它將格式化moduleFile.py__init__.pyscript.py

就您的 VSCode 配置而言,我也喜歡在settings.json

{
    "editor.formatOnSave": true,
    "python.linting.lintOnSave": true,
}

以確保每次我按下保存時,文件都會被整理和格式化。

如果您在 VSCode 中遇到了 linting/formatting 問題,您可以使用“命令面板”(Ctrl+Shift+P)強制執行以下命令:

  • Python:運行 Linting
  • Python:Select 短絨
  • 格式化文件
  • 用...格式化文檔

如果確實存在問題,這應該會產生視覺彈出樣式錯誤。

希望這對編碼有所幫助和快樂!

對於那些看到這一點並且上述解決方案都不起作用的人。 如果將黑色路徑設置為其絕對位置,它可能會解決問題。

在此處輸入圖像描述

我有同樣的問題,唯一的治療方法是移除

   "python.formatting.blackArgs": ["--skip-numeric-underscore-normalization"],  

從設置.json。 這沒有意義,但它有效。

如果您使用的是 windows 操作系統,那么有一個最簡單的解決方案:

  1. 找出您安裝黑色 package 的位置。 它可以在AppData/python/scripts
  2. 單擊開始菜單並鍵入“編輯系統環境變量”和 select 它。
  3. 現在單擊環境變量並雙擊“系統變量”部分中的“路徑”進行編輯。
  4. 現在在此處添加 package 路徑,如"Appdata/path/scripts;"

希望現在黑色在每次保存時都能正常工作。

這個解決方案對我來說很好。

注意:現在您可以在 CLI 中使用黑色。

對我來說,問題不是直接黑色,而是它讀取以查找配置設置的無效項目設置文件。 根本原因沒有記錄在任何地方。

我通過檢查OUTPUT選項卡並選擇了Python擴展名找到了原因。 它顯示黑色被調用,顯然沒有報告任何問題:

./.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)

修復此問題后,我可以手動格式化我的代碼,並且format on save時的格式也回來了。

有一個新的擴展,目前是預發布的,用於格式化黑色。 請參閱v1.67 發行說明,Python 黑色格式

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

用法

在 Visual Studio Code 中安裝后,“Black Formatter”將可用作 python 文件的格式化程序。 請將 select “黑色格式化程序”(擴展 id:ms-python.black-formatter)作為默認格式化程序。 您可以使用上下文菜單(在編輯器中右鍵單擊打開的 python 文件)和 select“使用...格式化文檔”來執行此操作,或者您可以將以下內容添加到您的設置中:

  "[python]": {
    "editor.defaultFormatter": "ms-python.black-formatter"
  }

保存時格式化

您可以通過在設置中具有以下值來啟用 python 的保存格式:

  "[python]": {
    "editor.defaultFormatter": "ms-python.black-formatter",
    "editor.formatOnSave": true
  }

另一種可能是您添加了格式不正確的黑色 arguments。 該插件希望將每個空格分隔的選項作為它自己的“項目”添加到設置 UI 中,如下所示: 黑色參數設置

您應該能夠看到 args 正確傳遞到 Output->Python 控制台,如下所示: 好黑指揮

應該是這樣的:

壞黑命令

從 vs 代碼運行時black可能會停止工作的另一個原因......

也許您已經開始使用 Python 3.10

如果使用結構模式匹配等新功能,黑色將失敗。 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.

我必須將--target-version=py310添加到 VS Code 的blackArgs中,如下所示:

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

請注意等號 (=)。

這個問題對我的黑人沒有任何幫助。 我放棄了並將設置> UI中的默認格式化程序切換為autopep8,一切正常。

可能您與默認格式化程序有沖突,只需將"[python]": { "editor.defaultFormatter": null }添加到 VSC 中的Open User Settings

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

如果你在開發容器上工作,那么你可能需要安裝 Black Formatter 擴展。 它對我有用,這是鏈接:

https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter

另一種可能性是語法錯誤阻止了 Black 的工作。 如果存在語法錯誤,黑色將不會應用任何格式更改。

但是,VS Code 仍然在狀態欄中顯示“Formatting with Black”並默默地失敗。

您可以通過從命令行運行 Black 來驗證這一點,如果有錯誤,它將顯示錯誤:

$ black foo.py
error: cannot format foo.py: Cannot parse: 328:4:     :

Oh no! 💥 💔 💥
1 file failed to reformat.

在我看來,使用黑色的最好方法是通過終端。 您需要做的就是將其安裝在終端上的 pip 上,使用: pip install black 然后在安裝 go 到終端上並輸入:黑色文件名。

整行將是: black filepath/file.py 因此,對於位於桌面上的名為 test.py 的文件,如果在 mac 上:black desktop/test.py 如果您想對多個文件執行此操作,而不是對每個文件單獨執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM