如何通过pyproject.toml将异步Python函数转为可执行CLI命令?
解决方案
要在不修改example/main.py代码的前提下,让pyproject.toml的脚本正确执行异步函数,你可以通过以下两种方式实现:
方法一:直接用Python命令包装执行
修改pyproject.toml的[project.scripts]配置,利用Python的-c参数直接调用asyncio.run()来运行异步函数:
[project.scripts] example = "python -c 'import asyncio; from example.main import main; asyncio.run(main())'"
执行example命令时,这条指令会自动导入你的异步main函数,并通过asyncio.run()完成协程的调度和执行,不会触发协程未等待的警告。
方法二:借助第三方CLI框架的异步支持(无需修改原函数)
如果你的项目已经依赖click或typer这类CLI框架,可以创建一个极简的包装模块(比如example/cli.py,这不算修改原有main.py代码):
import asyncio import click from example.main import main @click.command() def cli(): asyncio.run(main())
然后修改pyproject.toml的脚本配置:
[project.scripts] example = "example.cli:cli"
这种方式更适合需要扩展CLI功能的场景,且完全不改动原异步函数的代码。
内容的提问来源于stack exchange,提问作者niekas
相关产品推荐
相关产品推荐

