Tengo una función API simple como se muestra a continuación,
from fastapi import FastAPI app = FastAPI() @app.get("/") async def read_root(): return {"Hello": "World"}
Estoy iniciando el servidor usando el comando uvicorn
como,
uvicorn main:app
Dado que no estamos llamando a ningún archivo python directamente , no es posible llamar al comando uvicorn
desde Pycharm.
Entonces, ¿cómo puedo ejecutar el servidor fast-api usando Pycharm?
Intenta llamar a uvicorn dentro de tu código. p.ej:
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")
uvicorn.run(...)
En este caso, su código mínimo será el siguiente,
# 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)
Normalmente, iniciará el servidor ejecutando el siguiente comando,
python main.py
Para esta configuración, y ahora, puede configurar la ruta del script en la configuración de Pycharm
uvicorn
En este caso, su código mínimo será el siguiente,
# main.py from fastapi import FastAPI app = FastAPI() @app.get("/") async def read_root(): return {"Hello": "World"}
Normalmente, iniciará el servidor ejecutando el siguiente comando,
uvicorn main:app --reload
Para esta configuración, y ahora, puede configurar la ruta del script en la configuración de Pycharm
uvicorn
uvicorn
. Obtendrá la ruta ejecutando el comando, which uvicorn
, dentro de su entorno. ( Ver esta imagen )uvicorn
Puedes hacerlo sin agregar código a main.py
target to run
en lugar de Script path
elija el Module name
Module name
, escriba uvicorn
app.main:app --reload --port 5000
Otro ejemplo, esto podría ser útil para alguien.
# fastapi_demo.py import uvicorn from fastapi import FastAPI, Response app = FastAPI() @app.route('/', methods=['POST']) def demo(request): try: print(request) except Exception as e: print(e) return Response(content='OK') if __name__ == '__main__': uvicorn.run(app='fastapi_demo:app')