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

Docker运行Python脚本找不到modules下子模块,本地运行正常如何解决?

问题根源

你遇到的报错由两个核心错误导致:

  • COPY指令写法错误,未正确保留目录结构:你使用的COPY ./modules/* /app/modules/通配符写法,不会严格保证scripts_A、scripts_B子目录被作为整体复制到/app/modules下,实际构建后容器内的/app/modules路径下缺少scripts_B子目录,因此无法找到modules.scripts_B模块。
  • PYTHONPATH配置未持久化生效:你通过RUN export PYTHONPATH=/app/设置的环境变量仅在当前镜像构建的临时shell进程中生效,容器运行时该配置会丢失,虽然默认情况下Python会将脚本执行目录加入包查找路径,但该配置错误仍可能在部分场景下导致导包失败。
  • 冗余操作干扰:你执行的RUN mkdir /modules在容器根目录创建了无关的modules目录,不会对/app/modules产生影响,属于多余操作可删除。
修复方案
  1. 替换COPY指令,完整复制目录结构:将COPY ./modules/* /app/modules/改为COPY ./modules/ /app/modules/,即可完整保留modules下的所有子目录和文件结构。
  2. 持久化配置PYTHONPATH:将RUN export PYTHONPATH=/app/改为ENV PYTHONPATH=/app/,确保容器运行时该环境变量始终生效。
  3. 删除多余的RUN mkdir /modules指令。

修复后的参考Dockerfile:

FROM python:3.7-slim-buster

WORKDIR /app

RUN apt-get update

COPY script.py /app/
COPY ./modules/ /app/modules/ 
ENV PYTHONPATH=/app/

RUN ls -la /app/modules

CMD [ "python", "script.py" ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:54:03