You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Black格式化工具不遵守pyproject.toml的extend-exclude配置

解决Black在VSCode中extend-exclude配置不生效的问题

问题背景

环境:VSCode + Python 3.9 + black==22.6.0
项目结构:

--- root
------src
---------module0.py
---------module1.py
------tests
---------test_folder0
------------test_file0.py
------------test_file1.py
---------test_folder1
---------etc.

在根目录的pyproject.toml中配置extend-exclude试图排除测试文件,但多次尝试(包括排除整个tests文件夹、匹配test_*.py)均无效,正则已验证但不生效,当前最简配置:

[tool.black]
line-length = 200
target-version = ['py39']
include = '\.pyi?$'
extend-exclude = '''.*test_.*'''

解决方法

1. 修正正则表达式匹配规则

Black的extend-exclude正则基于文件路径匹配,采用Pythonre模块规则,需注意:

  • 需匹配完整路径片段,建议用锚点(^开头、$结尾)精准定位
  • 针对你的场景,可选择两种配置:
    • 排除整个tests目录下所有文件:
      extend-exclude = '''^tests/.*'''
      
    • 排除所有以test_开头的Python文件:
      extend-exclude = '''test_.*\.py$'''
      
  • toml多行字符串用三个单引号包裹时,正则无需额外转义(特殊字符除外)

2. 确保VSCode正确读取项目配置

  • 确认VSCode打开的是项目根目录,pyproject.toml必须放在根目录下
  • 通过命令面板(Ctrl+Shift+P)执行Python: Select Interpreter,选择项目对应的虚拟环境,保证VSCode使用该环境下的black==22.6.0
  • 检查VSCode设置中的Python > Formatting: Black Path,设置为虚拟环境中black的绝对路径(如./venv/bin/black或./venv/Scripts/black.exe),避免使用全局安装的Black

3. 验证配置是否生效

在项目根目录打开终端,激活虚拟环境后执行:

black --check .

观察输出:

  • 若命令行已排除测试文件,但VSCode格式化仍包含,重启VSCode或重置Python插件设置
  • 若命令行仍未排除,简化正则逐步测试,排查匹配逻辑问题

4. 避免与include配置冲突

当前include = '\.pyi?$'匹配Python文件和类型存根文件,与extend-exclude不冲突,但需确保extend-exclude正则优先级覆盖目标文件

内容的提问来源于stack exchange,提问作者Salazaja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 09:45:25