Pycharm FastAPI 配置在运行时有效,在添加断点时在调试时停止

问题描述 投票:0回答:1

我刚刚使用 Poetry 创建了一个新的 Python 项目。这很简单,这是我的 pyproject.toml:

[tool.poetry]
name = "my-app"
version = "0.1.0"
description = ""
authors = ["me"]
readme = "README.md"

[tool.poetry.dependencies]
python = "^3.12"
fastapi = "^0.104.1"
supabase = "^2.0.3"
uvicorn = "^0.24.0.post1"
pydantic = {extras = ["dotenv"], version = "^1.10.2"}

[tool.poetry.group.dev.dependencies]
mypy = "^1.5.1"
pre-commit = "^3.5.0"
pytest = "^7.4.3"
pytest-cov = "^4.1.0"

这是我的项目结构:入口点是

web_server.py

web_server.py

import uvicorn
from app.config.rest.api import create_fastapi_app

app = create_fastapi_app()

if __name__ == "__main__":  
    uvicorn.run(app)

api.py

from fastapi import FastAPI

from app.config.rest.endpoints.router import api_router


def create_fastapi_app() -> FastAPI:
    app = FastAPI(title="My API")

    app.include_router(api_router, prefix="/api")

    return app


router.py

from fastapi import Header, APIRouter, Depends

from app.config.rest.endpoints.meta import router as meta_router


def custom_headers(
        user_id: str = Header(examples=["postman"], convert_underscores=False),
):
    return


no_headers_router = APIRouter()
headers_router = APIRouter(dependencies=[Depends(custom_headers)])
no_headers_router.include_router(meta_router, tags=["meta"])

api_router = APIRouter()
api_router.include_router(no_headers_router)
api_router.include_router(headers_router)

我可以通过在控制台中运行

poetry run uvicorn  --app-dir ./src app.web_server:app --reload
来启动我的 Web 服务器。我还可以使用以下配置从 PyCharm 启动 Web 服务器:

这按预期工作:

如果我调试而不是运行相同的配置,它也可以工作。但是,如果我添加断点(无论在哪里),PyCharm 不会启动 API 并永远挂在那里。端点也无法访问,因为我猜启动过程尚未完成。例如,在

uvicorn.run(app)
中添加断点会导致应用程序永远挂起:

如果调试配置无法启动服务器,我会认为调试配置存在问题,但只有当我在代码中设置任何断点时才会发生这种情况。如果没有断点,配置将按预期启动应用程序。

这里可能发生什么?

python debugging pycharm fastapi python-poetry
1个回答
0
投票

尝试将 Python 降级到 3.11,我遇到了同样的问题,对我来说它有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.