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

如何通过Poetry工具运行Python异步脚本?解决协程未await报错

解决Poetry运行Python异步脚本的错误问题

问题原因

你遇到的RuntimeWarning是因为Poetry调用脚本时,直接执行了你的async def main()函数——异步函数直接调用只会返回协程对象,不会实际执行,自然触发“协程从未被await”的警告。而你写的if __name__ == "__main__"分支只有在直接运行脚本文件时才会生效,Poetry调用模块函数时不会进入这个分支。

修复方案

方法一:封装同步入口函数

修改你的Python脚本代码,把异步逻辑和同步入口分开:

from anyio import run

async def async_main():
    # 这里写你的异步业务逻辑
    pass

def main():
    # 用anyio.run执行异步函数
    run(async_main)

if __name__ == "__main__":
    # 直接运行脚本时也能正常执行
    main()

pyproject.toml的配置保持不变:

[tool.poetry.scripts]
clear_data = "clear_data.clear_data:main"

方法二:直接修改原main函数(简化版)

如果不想拆分函数,也可以把原main改成同步函数,内部调用异步逻辑:

from anyio import run

async def _main():
    pass

def main():
    run(_main)

if __name__ == "__main__":
    main()

验证

执行poetry run clear_data,此时Poetry调用的是同步的main函数,它会通过anyio.run正确触发异步逻辑,不会再出现警告。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:50:25