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

Docker容器中导入basic_config模块报ModuleNotFoundError求助

解决Docker容器中ModuleNotFoundError: No module named 'basic_config'问题

问题背景

运行Docker容器时执行src/model/model1/model.py,出现ModuleNotFoundError: No module named 'basic_config'错误,但代码在Windows本地和Linux服务器上运行正常。相关文件结构、代码及Docker配置如下:

文件结构

ml-project/
    enviroment/
        env.dev
        env.prod
    src/
        config/
            base_config.py
        model/
            model1/
                model.py
        .env
    piplines.yml
    requirements.txt

model.py代码

import sys
sys.path.append("../../config")
from basic_config import AGE

print(AGE)

Dockerfile内容

FROM python:3.8
WORKDIR /app
COPY . .
ARG env_type=dev
RUN pip install -r requirements.txt
CMD ["python", "src/module/model1/model.py"]

(注:Dockerfile中src/module/model1/model.py应为src/model/model1/model.py,属于笔误,需修正)

问题原因

核心问题是相对路径的解析基准不一致:

  • 本地运行时,你大概率是在src/model/model1/目录下执行python model.py,此时../../config会正确定位到src/config/并加入Python路径;
  • 但Docker容器中工作目录是/app,执行python src/model/model1/model.py时,../../config是相对于/app解析的,实际路径变成/app/../../config,完全偏离了正确的/app/src/config路径,导致模块找不到。

解决方案

方案1:基于文件绝对路径动态添加路径

修改model.py,通过当前文件的绝对路径推导config目录位置,彻底摆脱工作目录限制:

import sys
from pathlib import Path

# 获取当前文件所在目录的父级父级父目录(即src/目录)
src_root = Path(__file__).parent.parent.parent
# 拼接得到config目录的绝对路径
config_dir = src_root / "config"
# 添加到Python路径
sys.path.append(str(config_dir))

from basic_config import AGE
print(AGE)

方案2:将src目录加入Python全局路径(推荐)

这种方式更符合Python模块化规范,维护性更强:

  1. 先在src/config/目录下创建空的__init__.py文件,让Python将config识别为合法模块;
  2. 修改Dockerfile,把/app/src加入PYTHONPATH环境变量:
FROM python:3.8
WORKDIR /app
COPY . .
ARG env_type=dev
RUN pip install -r requirements.txt
# 将src目录添加到Python搜索路径
ENV PYTHONPATH="/app/src:${PYTHONPATH}"
CMD ["python", "src/model/model1/model.py"]
  1. 简化model.py的导入语句:
from config.base_config import AGE
print(AGE)

方案3:调整Docker工作目录匹配本地运行逻辑

把Docker的工作目录切换到/app/src,让相对路径解析逻辑和本地一致:

FROM python:3.8
WORKDIR /app/src
COPY . .
ARG env_type=dev
# 注意requirements.txt的路径变为../requirements.txt
RUN pip install -r ../requirements.txt
CMD ["python", "model/model1/model.py"]

此时model.py原有的../../config会正确解析为/app/src/config,无需修改代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:05:55