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

Docker构建成功后执行seed_db仍报sqlalchemy模块未找到错误

解决Docker容器中Poetry运行任务时的ModuleNotFoundError(SQLAlchemy)

问题核心原因

容器内存在两个独立的Python环境,导致依赖不互通:

  • Docker构建阶段,你通过poetry export将依赖转为requirements.txt,用pip安装到了系统Python环境(/usr/local/bin/python3.9)。
  • 进入容器后手动安装Poetry时,它自动创建了一个全新的虚拟环境(/root/.cache/pypoetry/virtualenvs/...),这个环境未安装任何pyproject.toml中声明的依赖,因此执行poetry run poe seed_db时找不到SQLAlchemy。

另外,你的pyproject.toml中重复声明了poethepoet(同时在dev-dependencies和group.dev.dependencies中),可能引发版本冲突,建议清理冗余配置。


解决方案

方案一:优化Dockerfile(推荐,一劳永逸)

修改Dockerfile,在构建阶段直接配置好Poetry环境,避免容器启动后手动操作:

FROM tiangolo/uvicorn-gunicorn:python3.9-slim AS base

# 安装基础依赖与Poetry
RUN apt-get update && apt-get install -y gcc curl && rm -rf /var/lib/apt/lists/*
RUN curl -sSL https://install.python-poetry.org | python3 -
ENV PATH="/root/.local/bin:$PATH"

# 复制依赖配置文件
COPY pyproject.toml poetry.lock* /app/

# 安装所有依赖(含dev组)
RUN poetry install --no-root --with dev

# 复制应用代码
COPY . /app

# 原有环境变量配置
ENV MAX_WORKERS=1
ENV LOG_LEVEL="debug"
ENV MODULE_NAME=app.application.core

重新构建镜像后,直接运行任务即可:

docker-compose exec backend poetry run poe migratedb
docker-compose exec backend poetry run poe seed_db

方案二:临时修复当前运行的容器

若不想重新构建镜像,进入容器后执行以下命令,让Poetry虚拟环境安装所有依赖:

docker-compose exec backend sh
cd /app
# 安装pyproject.toml中所有依赖(含dev组)
poetry install --with dev
# 执行任务
poetry run poe migratedb
poetry run poe seed_db
exit

额外清理建议

打开pyproject.toml,删除[tool.poetry.dev-dependencies]中的poethepoet = "^0.18.0",只保留[tool.poetry.group.dev.dependencies]下的声明,避免版本冲突。

内容的提问来源于stack exchange,提问作者Uwem Uke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 00:53:16