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

Docker容器运行Langchain/Langserve应用遇ModuleNotFoundError求助

问题描述

构建Langchain/Langserve应用时,本地通过langchain serve可正常运行,但使用Langserve生成的Dockerfile构建容器后,在AWS Margate运行出现错误:ModuleNotFoundError: No module named 'langchain'。此前相同Dockerfile本地构建可正常运行,现在本地重新构建也出现同样问题。


相关配置文件

Dockerfile

FROM python:3.11.5-bookworm

ENV HOST=0.0.0.0
ENV LISTEN_PORT 8080
EXPOSE 8080

RUN apt-get update && apt-get install -y git
RUN pip install poetry==1.6.1
RUN poetry config virtualenvs.create false

WORKDIR /code
COPY ./pyproject.toml ./README.md ./poetry.lock* ./
COPY ./packages ./packages
RUN poetry install  --no-interaction --no-ansi --no-root
COPY ./app ./app
RUN poetry install --no-interaction --no-ansi

EXPOSE 8080
CMD exec uvicorn app.server:app --host 0.0.0.0 --port 8080

pyproject.toml

[tool.poetry]
name = "pdfbot"
version = "0.0.1"
description = ""
authors = []
readme = "README.md"

[tool.poetry.dependencies]
python = ">=3.8.1,<4.0"
langchain-core = ">=0.1.5"
langchain-openai = ">=0.0.1"
huggingface-hub = "^0.20.3"
pytest = "^8.0.0"
pypdf = "^4.0.1"
sentence-transformers = "^2.3.1"
chromadb = "^0.4.22"

[tool.poetry.group.dev.dependencies]
langchain-cli = ">=0.0.4"
fastapi = "^0.104.0"
sse-starlette = "^1.6.5"

[tool.langserve]
export_module = "pdfbot"
export_attr = "chain"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

poetry.lock中langchain相关条目

[[package]]
name = "langchain"
version = "0.1.5"
description = "Building applications with LLMs through composability"
optional = false
python-versions = ">=3.8.1,<4.0"
files = [
    {file = "langchain-0.1.5-py3-none-any.whl", hash = "sha256:4614118d4a95b2e7ba3611a0b6b21707a259a21652a04fbe3c31205bcf3fcd50"},
    {file = "langchain-0.1.5.tar.gz", hash = "sha256:69603a5bb21b044ddea69d38131dbbf47475afdf79728644faa67d1ad325d652"},
]

[package.dependencies]
aiohttp = ">=3.8.3,<4.0.0"
async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""}
dataclasses-json = ">=0.5.7,<0.7"
jsonpatch = ">=1.33,<2.0"
langchain-community = ">=0.0.17,<0.1"
langchain-core = ">=0.1.16,<0.2"
langsmith = ">=0.0.83,<0.1"
numpy = ">=1,<2"
pydantic = ">=1,<3"
PyYAML = ">=5.3"
requests = ">=2,<3"
SQLAlchemy = ">=1.4,<3"
tenacity = ">=8.1.0,<9.0.0"

问题原因
  1. 依赖声明缺失:pyproject.toml的依赖列表中没有显式声明langchain,仅包含langchain-core和langchain-openai。虽然poetry.lock中有langchain条目,但这是本地环境中手动/间接安装后生成的,容器构建时Poetry会严格根据pyproject.toml解析依赖——langchain-core是langchain的依赖,而非反向依赖,因此容器内不会自动安装langchain。
  2. 构建缓存或环境差异:之前本地构建正常可能是因为Docker缓存了包含langchain的镜像层,重新安装Docker后缓存丢失,导致问题显现;GitLab构建环境无本地缓存,直接暴露了依赖缺失的问题。

解决步骤

1. 显式添加langchain依赖

编辑pyproject.toml,在[tool.poetry.dependencies]区块中添加langchain依赖:

[tool.poetry.dependencies]
# 保留原有依赖,新增以下行
langchain = ">=0.1.5"

版本号可根据poetry.lock中的版本(0.1.5)指定,或使用兼容范围。

2. 更新poetry.lock(可选但推荐)

本地执行以下命令更新锁文件,确保依赖版本一致:

poetry lock --no-update

3. 调整Dockerfile构建步骤(可选,用于排查验证)

若想确认依赖是否安装成功,可在Dockerfile中添加验证步骤,比如在RUN poetry install --no-interaction --no-ansi后添加:

RUN poetry show langchain || pip list | grep langchain

这会在构建时输出langchain的安装信息,方便排查。

4. 重新构建并测试容器

执行Docker构建命令重新生成镜像,然后运行容器验证问题是否解决:

docker build -t pdfbot .
docker run -p 8080:8080 pdfbot

额外说明
  • 确保项目代码中确实依赖langchain(而非仅langchain-core),若代码中未直接使用langchain,则需检查是否有间接依赖遗漏。
  • Poetry的--no-root参数会跳过安装当前项目,第一次poetry install --no-root仅安装项目依赖,第二次poetry install才安装项目本身,此步骤逻辑无误,但依赖缺失会导致运行时错误。

内容的提问来源于stack exchange,提问作者Lars UK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 08:53:12