Docker部署Python Flask应用导入LlamaParse报错:TypeError: 'type' object is not subscriptable
Docker部署Python Flask应用导入LlamaParse报错:TypeError: 'type' object is not subscriptable
我帮你分析下这个问题,你遇到的TypeError: 'type' object is not subscriptable本质是Python版本兼容性问题。
你Docker容器里用的是Python 3.8,而llama-parse库的代码里用到了list[dict]这种类型注解写法——这种语法是Python 3.9才正式引入的(PEP 585规范),Python 3.8及更早版本并不支持,必须用typing.List[dict]这种旧写法。所以当你在Python3.8环境里导入LlamaParse时,就会触发这个语法错误。而你在Colab里能正常运行,是因为Colab默认使用的是较新的Python版本(通常是3.9或更高),天然支持这种新语法。
下面给你两种解决思路:
方案一:升级Docker镜像的Python版本(推荐)
这是最彻底、最省心的解决办法,直接把Dockerfile里的基础镜像换成Python3.9及以上版本,比如3.9-slim:
# 修改Dockerfile的第一行 FROM python:3.9-slim # 其余内容保持不变 WORKDIR /app COPY . /app RUN pip install --no-cache-dir -r requirements.txt EXPOSE 5000 ENV FLASK_APP=app.py CMD ["flask", "run", "--host=0.0.0.0"]
修改后重新构建镜像并启动容器:
docker-compose down docker-compose build docker-compose up
方案二:在Python3.8环境下兼容处理(仅当必须保留3.8时使用)
如果因为项目限制不能升级Python版本,可以尝试以下步骤:
- 在
requirements.txt中添加typing-extensions库,它能让Python3.8支持部分新版本的类型注解语法:
Flask==2.1.2 python-dotenv==0.20.0 boto3==1.24.12 Werkzeug==2.2.0 PyMuPDF llama-index openai llama-parse typing-extensions>=4.1.0
- 尝试安装兼容Python3.8的旧版本
llama-parse,比如指定版本号:
llama-parse==0.3.0
(注:如果这个版本还是不行,可以尝试更早的版本,直到找到适配3.8的版本)
备注:内容来源于stack exchange,提问作者Ben Spi
相关产品推荐
相关产品推荐

