如何使用 Pycharm 运行 fast-api 服务器?

JPG*_*JPG 29 python pycharm fastapi

我有一个简单的 API 函数,如下所示,

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def read_root():
    return {"Hello": "World"}
Run Code Online (Sandbox Code Playgroud)

我正在使用uvicorn命令启动服务器,

uvicorn main:app
Run Code Online (Sandbox Code Playgroud)

由于我们没有直接调用任何 python 文件,因此无法uvicorn从 Pycharm调用命令。

那么,如何使用 Pycharm 运行 fast-api 服务器?

JPG*_*JPG 55

方法一:通过调用运行FastAPI uvicorn.run(...)

在这种情况下,您的最小代码如下,

# main.py

import uvicorn
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def read_root():
    return {"Hello": "World"}


if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)
Run Code Online (Sandbox Code Playgroud)

通常,您将通过运行以下命令来启动服务器,

python main.py
Run Code Online (Sandbox Code Playgroud)

Pycharm 设置

对于此设置,现在,您可以在 Pycharm 的配置中设置脚本路径

pycharm-uvicorn.run

笔记

  • Script Path:FastAPI 脚本的路径
  • Python 解释器:选择你的解释器/虚拟环境
  • 工作目录:您的 FastAPI 项目根目录

方法 2:通过调用运行 FastAPI uvicorn命令

在这种情况下,您的最小代码如下,

# main.py

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def read_root():
    return {"Hello": "World"}
Run Code Online (Sandbox Code Playgroud)

通常,您将通过运行以下命令来启动服务器,

uvicorn main:app --reload
Run Code Online (Sandbox Code Playgroud)

Pycharm 设置

对于此设置,现在,您可以在 Pycharm 的配置中设置脚本路径

pycharm-uvicorn.command

笔记

  • 模块名称:设置为 uvicorn
  • [可选] 脚本:uvicorn二进制文件的路径。您将通过which uvicorn在您的环境中执行命令 , 来获取路径。(见这张图片
  • 参数:uvicorn命令的实际参数
  • Python 解释器:选择你的解释器/虚拟环境
  • 工作目录:您的 FastAPI 项目根目录


Jon*_*bop 20

无需在 main.py 中添加代码即可完成

  1. target to run而不是Script path选择Module name
  2. Module name类型uvicorn
  3. 在参数 app.main:app --reload --port 5000

在此处输入图片说明

  • 太棒了,在其他地方找不到关于如何同时调试和重新加载的答案 (2认同)
  • 我认为这是最好的答案,因为它是唯一允许您使用“--reload”的答案 (2认同)

Nic*_*sta 7

尝试在您的代码中调用 uvicorn。例如:

from fastapi import FastAPI
import uvicorn

app = FastAPI()


@app.get("/")
async def read_root():
    return {"Hello": "World"}

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=5000, log_level="info")
Run Code Online (Sandbox Code Playgroud)

参考