【发布时间】:2021-04-02 21:22:40
【问题描述】:
我已经检查过了 PyInstaller and FastAPI (maximum recursion depth exceeded) 和 Pyinstaller-compiled Uvicorn server does not start correctly
FastAPI 演示 main.py:
import uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def root():
return {"hello": "world"}
if __name__ == '__main__':
uvicorn.run(app, host="0.0.0.0", port=58000, reload=False)
首先运行 pyinstaller pyinstaller -F main.py --clean 并在规范中添加 hidden_imports:
hidden_imports=[
'uvicorn.logging',
'uvicorn.loops',
'uvicorn.loops.auto',
'uvicorn.protocols',
'uvicorn.protocols.http',
'uvicorn.protocols.http.auto',
'uvicorn.protocols.websockets',
'uvicorn.protocols.websockets.auto',
'uvicorn.lifespan',
'uvicorn.lifespan.on',
]
效果不错,但是worker大于1的时候app必须是字符串:
WARNING: You must pass the application as an import string to enable 'reload' or 'workers'.
所以我改成:
if __name__ == '__main__':
uvicorn.run("main:app", host="0.0.0.0", port=58000, reload=False, workers=2)
之后,我运行了应用程序dist/main,它创建了许多如下所示的应用程序,快速使用 100% 的 CPU 和 100% 的内存:
适用于 Python 3.8.3 和 pyinstaller 4.0
【问题讨论】:
标签: python pyinstaller fastapi uvicorn