如何在Poetry项目中添加针对指定目录运行Black格式化工具的脚本?
如何在Poetry项目中添加针对指定目录运行Black格式化工具的脚本?
首先咱们拆解下你遇到的两个核心问题:脚本配置的语法错误,以及未安装脚本的警告,然后一步步解决它们。
为什么原来的写法会报错?
Poetry的[tool.poetry.scripts]字段是用来定义Python入口点的,格式必须是模块路径:函数名。你直接在后面追加scripts/**/*.py参数,Poetry会把它当成Python代码的一部分解析,自然就出现语法错误了——它误以为你要给main函数传参,但写法完全不符合Python语法规范。
解决方案一:封装Python脚本(跨平台推荐)
这是最稳妥的方式,通过一个小脚本封装Black的调用逻辑,自动传入指定目录的参数:
- 在项目根目录创建
scripts文件夹(如果没有的话),然后新建format.py文件,内容如下:
import sys from black import main as black_main def main(): # 将目标目录路径添加到命令行参数列表 sys.argv.append("scripts/**/*.py") # 调用Black的主函数 black_main()
- 修改
pyproject.toml里的脚本配置,指向这个新的入口:
[tool.poetry.scripts] format-scripts = "scripts.format:main"
- 运行
poetry install,把这个脚本正式安装到虚拟环境中——这一步是解决警告的关键。
完成后,你只需要执行poetry run format-scripts,就能自动用Black格式化scripts/**/*.py路径下的所有Python文件了。
解决方案二:直接调用Shell命令(仅适合类Unix系统)
如果不想额外写Python脚本,也可以直接在Poetry脚本里调用Shell命令,但这种方式在Windows系统上可能存在兼容性问题:
[tool.poetry.scripts] format-scripts = "bash -c 'black scripts/**/*.py'"
同样,运行poetry install后,执行poetry run format-scripts就能生效。
关于警告的说明
你之前看到的警告,本质是因为没有通过poetry install把脚本安装到虚拟环境的可执行路径中。Poetry明确提示,未来版本会移除直接运行未安装脚本的支持,所以只要执行poetry install完成脚本安装,警告就会彻底消失。
备注:内容来源于stack exchange,提问作者Paul Razvan Berg
相关产品推荐
相关产品推荐

