python - PyInstaller 和 FastAPI(超出最大递归深度)

标签 python pyinstaller fastapi

我有一个使用 的 python 服务快速API 作为网页界面。我需要制作一个可执行文件,因此我使用 PyInstaller .

我不断收到以下错误:

File "..../miniconda3/lib/python3.7/site-packages/PyInstaller/lib/modulegraph/modulegraph.py", line 2912, in _load_package
    self._load_module(fqname, fp, buf, stuff)
File "..../miniconda3/lib/python3.7/site-packages/PyInstaller/lib/modulegraph/modulegraph.py", line 2093, in _load_module
    m = self._load_package(fqname, pathname, packagepath)

RecursionError: maximum recursion depth exceeded while calling a Python object

我添加了 import sys; sys.setrecursionlimit(50000)到原始的python文件以及规范中,但仍然遇到同样的问题。

有趣的是,如果我不使用 ,我不会收到该错误。快速API (例如,它适用于 Flask)。看起来 PyInstaller 与 fastapi 有一些问题。

有谁知道如何解决这个问题?

这是我的主要 python 函数中的代码:
from fastapi import FastAPI
import uvicorn
app = FastAPI()

if __name__ == "__main__":
    uvicorn.run("main:app", host="0.0.0.0", workers=1, port=5000)

最佳答案

我今天也遇到了同样的问题,发现问题出在Pydantic模块。
我直接从存储库重新安装了它:

pip uninstall pydantic

pip install git+git://github.com/samuelcolvin/pydantic@master#egg=pydantic
# or with extras
pip install git+git://github.com/samuelcolvin/pydantic@master#egg=pydantic[email,typing_extensions]
这将解决 最大递归深度 问题,但会在 Uvicorn 中遇到另一个问题:
Traceback (most recent call last):
  File "logging/config.py", line 388, in resolve
AttributeError: module 'uvicorn' has no attribute 'logging'
我替换了UvicornHypercorn + Uvloop现在效果很好。
这是我的最终代码:
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


if __name__ == "__main__":
    import asyncio
    import uvloop
    from hypercorn.asyncio import serve
    from hypercorn.config import Config

    config = Config()
    config.bind = ["0.0.0.0:8000"]

    asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)

    loop.run_until_complete(serve(app, config))

关于python - PyInstaller 和 FastAPI(超出最大递归深度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61491358/

相关文章:

几年中两个日期之间的Pythonic差异?

c++ - 返回引用的导出函数

python - 使用 pyinstaller 创建包含图片的包

python - 带有 Python : 3. 10.0b4 的 PyInstaller - 导入错误:没有名为 _bootlocale 的模块

nginx - FastAPI文档不适用于Nginx Ingress Controller

python - 使用 Pydantic 模型的 FastAPI 查询参数

python - 在表的特定列中搜索不匹配的项目

python - Ansible 条件基于文件的内容

python - Msys2 上的 Pyinstaller 与 pygobject

python - 将 python 文件作为模块导入 Azure 应用服务时出现 ModuleNotFoundError