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

使用Poetry构建Dockerfile时遭遇ModuleNotFoundError问题求助

解决ModuleNotFoundError: No module named 'geocoding'问题

错误原因

  • 模块搜索路径差异:PyCharm会自动将项目根目录(包含backend_services、pyproject.toml的目录)添加到Python的模块搜索路径sys.path中,因此能识别geocoding模块;但终端和Docker容器中,默认sys.path不包含该根目录,导致Python找不到模块。
  • Dockerfile复制路径错误:你的geocoding目录实际位于backend_services下,但Dockerfile中使用COPY geocoding /app/geocoding,构建时会找不到源文件(构建上下文是项目根目录,根目录下没有直接的geocoding目录)。即使文件被错误复制到容器中,直接运行脚本文件时,Python只会将脚本所在目录加入sys.path,而非/app,依旧无法识别geocoding模块。

解决方案

方案一:使用模块方式启动脚本

将Dockerfile中的启动命令改为模块启动模式,这种方式会自动将当前工作目录(/app)加入sys.path:

CMD ["python", "-m", "geocoding.infrastructure.rest_api.app"]

方案二:修正Dockerfile复制逻辑+模块启动

调整Dockerfile中复制geocoding目录的路径,确保文件被正确复制到容器中,同时用模块方式启动:

FROM python:3.11

WORKDIR /app

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

RUN pip3 install poetry \
    && poetry config virtualenvs.create false \
    && poetry install --no-interaction

# 从正确路径复制geocoding目录
COPY backend_services/geocoding ./geocoding

EXPOSE 5000

# 模块方式启动应用
CMD ["python", "-m", "geocoding.infrastructure.rest_api.app"]

方案三:手动添加模块路径(不推荐)

在app.py的最顶部添加代码,手动将项目根目录加入sys.path:

import sys
from pathlib import Path

# 将/app目录添加到模块搜索路径
sys.path.append(str(Path(__file__).resolve().parent.parent.parent.parent))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:26:19