Docker运行Python镜像时出现No module named错误求助
问题原因及解决方案
核心问题
你的Dockerfile中ADD module/ .指令用法错误——它会将本地module目录下的所有内容直接复制到容器的工作目录,而非在容器中创建一个名为module的独立目录。这导致Python找不到名为module的模块(容器里根本不存在这个文件夹)。
修复步骤
修正模块复制指令
将Dockerfile中的ADD module/ .替换为:COPY module/ module/这条指令会在容器工作目录下创建
module文件夹,并将本地module目录的所有内容完整复制进去,和你本地的项目结构保持一致。确认模块初始化文件
确保容器中的module文件夹下存在__init__.py文件(可以是空文件),Python需要这个文件识别该目录为合法模块。根据你提供的项目结构,本地module目录下似乎没有直接的__init__.py,建议在本地module文件夹中添加一个,再重新构建镜像。可选:显式设置Python路径
如果修复后仍有问题,可在Dockerfile中添加环境变量,让Python明确找到模块所在目录:ENV PYTHONPATH="/usr/src/app" # 替换为你的容器工作目录,默认是/,也可提前用WORKDIR指定或者在
main.py开头添加以下代码:import sys import os sys.path.append(os.path.dirname(os.path.abspath(__file__)))
修正后的完整Dockerfile示例
FROM continuumio/miniconda3 # 设置工作目录(可选,让结构更清晰) WORKDIR /usr/src/app COPY parcellation_env.yml . RUN conda env create -f parcellation_env.yml SHELL ["conda", "run", "-n", "parcellation_env", "/bin/bash", "-c"] COPY main.py . COPY module/ module/ ENTRYPOINT ["conda", "run", "-n", "parcellation_env", "python", "main.py", "-C", "white_matter_parcellation/config/config_point_autoencoder.yaml", "--use_splits", "-y"]
内容的提问来源于stack exchange,提问作者Neskelogth
相关产品推荐
相关产品推荐

