Pok*_*tra 31 python fastapi uvicorn
我尝试使用 uvicorn 网络服务器运行 FastAPI,但它引发了错误。
我运行这个命令,
uvicorn api:app --reload --host 0.0.0.0
但是终端有错误。
Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
Started reloader process [23445]
Error loading ASGI app. Could not import module "api".
Stopping reloader process [23445]
Run Code Online (Sandbox Code Playgroud)
我真的很感激任何建议或建议
Yag*_*nci 69
在文件名前添加目录名
uvicorn src.main:app
Run Code Online (Sandbox Code Playgroud)
或cd进入该目录
cd src
uvicorn main:app
Run Code Online (Sandbox Code Playgroud)
发生这种情况是因为您与 FastAPI 应用程序实例不在同一文件夹中,更具体地说:
假设我有一个这样的应用程序树;
my_fastapi_app/
??? app.yaml
??? docker-compose.yml
??? src
? ??? main.py
??? tests
??? test_xx.py
??? test_yy.py
$ pwd # Present Working Directory
/home/yagiz/Desktop/my_fastapi_app
Run Code Online (Sandbox Code Playgroud)
我和我的应用程序实例不在同一个文件夹中,所以如果我尝试使用 uvicorn 运行我的应用程序,我会收到像你这样的错误
$ uvicorn main:app --reload
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [40645] using statreload
ERROR: Error loading ASGI app. Could not import module "main".
Run Code Online (Sandbox Code Playgroud)
答案就这么简单,在你的文件名前加上文件夹名
uvicorn src.main:app --reload
Run Code Online (Sandbox Code Playgroud)
或者你可以改变你的工作目录
cd src
Run Code Online (Sandbox Code Playgroud)
现在我在我的应用程序实例所在的文件夹中
src
??? main.py
Run Code Online (Sandbox Code Playgroud)
再次运行你的 uvicorn
$ uvicorn main:app --reload
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [40726] using statreload
INFO: Started server process [40728]
INFO: Waiting for application startup.
INFO: Application startup complete.
Run Code Online (Sandbox Code Playgroud)
Fer*_*dox 16
发生这种情况的原因之一是您正在使用:
\nuvicorn src/main:app --reload \nRun Code Online (Sandbox Code Playgroud)\n而不是正确的语法:
\nuvicorn src.main:app --reload \nRun Code Online (Sandbox Code Playgroud)\n注意. 而不是/
\n当前终端中的自动完成提示格式错误。
假设:
\n(1) 你的结构是这样的:
\nproject_folder/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 some_folder\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tests\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test_xx.py\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test_yy.py\nRun Code Online (Sandbox Code Playgroud)\n(2) 您的对象确实被分配给名为FastAPI()的对象:appmain.py
app = FastAPI()\nRun Code Online (Sandbox Code Playgroud)\n(3) 您正在运行 uvicorn 命令project_folder,例如:
(venv) <username>@<pcname>:~/PycharmProjects/project_folder$ uvicorn src.main:app --reload\nRun Code Online (Sandbox Code Playgroud)\n
小智 7
我遇到了同样的问题并解决了在 main 之前添加包名的问题,在你的情况下尝试:
uvicorn src.main:app --reload
Run Code Online (Sandbox Code Playgroud)
可能会解决问题
| 归档时间: |
|
| 查看次数: |
26337 次 |
| 最近记录: |