擅长:python、mysql、java
<p>在我看来,这就像一个无限递归。我怀疑原因与<code>main:app</code>的自引用和一些将<code>__name__</code>设置为<code>__main__</code>的PyInstaller <code>sys</code>暗魔法有关</p>
<p>我建议将<code>app</code>移动到一个单独的模块中,并在<code>uvicorn.run()</code>中从该模块引用它:</p>
<pre class="lang-py prettyprint-override"><code># app.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def root():
return {"hello": "world"}
</code></pre>
<pre class="lang-py prettyprint-override"><code># main.py
import uvicorn
if __name__ == "__main__":
uvicorn.run("app:app", host="0.0.0.0", port=58000, reload=False, workers=2)
</code></pre>
<p>另外,不要忘记添加<code>app.py</code>作为PyInstaller的隐藏导入:</p>
<pre><code>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',
'app',
]
</code></pre>