求助: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$'''
- 排除整个tests目录下所有文件:
- 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
相关产品推荐
相关产品推荐

