如何通过pyproject.toml配置Black自动识别Python源码目录?
配置Black实现根目录执行
black自动格式化源码目录 问题场景
目录结构如下:
hello |_ pyproject.toml |_ hello |_main.py
已在pyproject.toml的[tool.black]中配置了include = ['\.pyi?$', 'hello'],当前:
- 在根目录执行
black hello可以正常格式化下层hello目录的代码 - 进入下层
hello目录执行black或black main.py也能正常格式化 - 但在根目录直接执行
black时,会提示:Black使用方法:black [OPTIONS] SRC ... 必须指定'SRC'或代码内容,希望不用在命令行指定路径,直接执行black就能自动格式化下层hello目录的代码。
解决方案
Black的include配置是用来筛选已扫描路径下的文件,而非指定要扫描的根路径,所以仅靠pyproject.toml无法让black命令在无参数时自动指定路径,需要通过以下方式实现需求:
方法1:使用Shell别名(临时/永久)
在终端中设置别名,让black默认执行black hello:
- 临时生效(当前会话):
alias black='black hello' - 永久生效(根据你的Shell类型配置):
- Bash:编辑
~/.bashrc或~/.bash_profile,添加上面的别名行,然后执行source ~/.bashrc生效 - Zsh:编辑
~/.zshrc,添加别名行后执行source ~/.zshrc生效
- Bash:编辑
方法2:通过Poetry脚本包装命令
在pyproject.toml中添加自定义脚本,用poetry run来触发格式化:
[tool.poetry.scripts] format = "black hello"
配置完成后,在根目录执行:
poetry run format
就能自动格式化下层hello目录的代码,相当于把black hello包装成了一个更简洁的命令。
方法3:直接执行black .(无需额外配置)
你当前的include配置已经生效,在根目录执行black .时,Black会扫描当前目录下的所有内容,然后根据include规则只处理hello目录下的.py/.pyi文件,效果和black hello一致,只是多输入一个.,操作成本也很低。
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

