You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在PythonAnywhere部署集成EasyOCR的FastAPI端点启动失败求助

问题

我尝试部署一个集成EasyOCR(仅CPU运行)的FastAPI端点,供他人通过HTTPS POST请求调用。服务在本地运行正常,但部署到PythonAnywhere时出现问题,已安装easyocr、python-multipart==0.0.5等依赖。

代码

import io
import logging
import re

from fastapi import FastAPI, APIRouter, Request, File, UploadFile
from fastapi.responses import FileResponse, StreamingResponse
import easyocr

import PIL
from PIL import Image, ImageOps
import numpy

app = FastAPI()
router = APIRouter()
ocr = easyocr.Reader(["en"])
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("ocr")


@app.get("/")
async def root():
    return {"message": "Hello World"}


@app.post("/ocr")
async def do_ocr(request: Request, file: UploadFile = File(...)):
    if file is not None:
        imgFile = numpy.array(PIL.Image.open(file.file).convert("RGB"))
        res = ocr.readtext(imgFile)

        # 返回字符串数组
        return [item[1] for item in res]

    return {"error": "missing file"}


app.include_router(router)
if __name__ == "__main__":
    import uvicorn

    uvicorn.run(app)

错误日志

During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/home/somyatomar15/main.py", line 82, in <module>
    uvicorn.run(app)
  File "/usr/local/lib/python3.10/site-packages/uvicorn/main.py", line 463, in run
    server.run()
  File "/usr/local/lib/python3.10/site-packages/uvicorn/server.py", line 60, in run
    return asyncio.run(self.serve(sockets=sockets))
  File "/usr/local/lib/python3.10/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/usr/local/lib/python3.10/asyncio/base_events.py", line 633, in run_until_complete
    self.run_forever()
  File "/usr/local/lib/python3.10/asyncio/base_events.py", line 600, in run_forever
    self._run_once()
  File "/usr/local/lib/python3.10/asyncio/base_events.py", line 1896, in _run_once
    handle._run()
  File "/usr/local/lib/python3.10/asyncio/events.py", line 80, in _run
    self._context.run(self._callback, *self._args)
  File "/usr/local/lib/python3.10/site-packages/uvicorn/server.py", line 77, in serve
    await self.startup(sockets=sockets)
  File "/usr/local/lib/python3.10/site-packages/uvicorn/server.py", line 158, in startup
    sys.exit(1)
SystemExit: 1
解决建议
  • 调整EasyOCR初始化时机:将全局的ocr = easyocr.Reader(["en"])移到FastAPI启动事件中,避免PythonAnywhere的WSGI环境在启动阶段加载资源失败。修改示例:
    @app.on_event("startup")
    async def startup_event():
        global ocr
        ocr = easyocr.Reader(["en"], gpu=False)  # 明确禁用GPU,适配纯CPU环境
    
  • 移除本地启动代码:PythonAnywhere采用WSGI部署,不需要if __name__ == "__main__"块中的uvicorn启动逻辑,直接保留FastAPI实例即可。
  • 锁定依赖兼容版本:在requirements.txt中指定适配Python 3.10的依赖版本,避免环境差异导致问题:
    fastapi>=0.100.0
    uvicorn>=0.23.2
    easyocr>=1.7.0
    python-multipart==0.0.5
    Pillow>=10.0.0
    numpy>=1.25.0
    
  • 查看完整错误堆栈:当前日志仅显示最终退出信息,需在PythonAnywhere的控制台或日志页面找到完整Traceback,定位真正错误(比如模型下载失败、内存不足、依赖缺失等)。
  • 配置WSGI入口:在PythonAnywhere的WSGI配置文件中正确导入FastAPI应用,示例:
    import sys
    sys.path.insert(0, '/home/somyatomar15')
    
    from main import app as application
    

内容的提问来源于stack exchange,提问作者Somya-15

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 09:02:56