Docker运行报No module named 'pandas'错误 已配置conda依赖问题排查
问题原因
你通过conda env create命令创建了名为plato_vrar的独立虚拟环境,pandas已经被安装到该环境中,但整个构建流程和镜像运行时都没有激活这个虚拟环境:ENTRYPOINT直接调用的是miniconda默认base环境的python解释器,base环境未安装pandas,因此触发依赖缺失报错。
另外你后续执行的pip install sagemaker-inference也仅安装到base环境,后续就算激活plato_vrar环境也会找不到该依赖。
解决方案
提供三种常用修复方案,任选其一即可:
- 方案1:保留虚拟环境,所有操作指定目标环境执行
修改Dockerfile相关命令,所有涉及依赖安装、脚本运行的操作都指定使用plato_vrar环境:
# 原有创建环境的命令不变 RUN conda env create -f condaEnv.yml python=3.9.7 # 在plato_vrar环境中安装sagemaker-inference RUN conda run -n plato_vrar pip install sagemaker-inference # 其余COPY、ENV配置不变 # 修改入口点为激活plato_vrar环境后运行脚本,--no-capture-output参数避免日志被conda拦截 ENTRYPOINT ["conda", "run", "--no-capture-output", "-n", "plato_vrar", "python", "/opt/ml/code/inference_code.py"]
- 方案2:废弃独立虚拟环境,所有依赖安装到base环境
如果不需要多环境隔离,直接将condaEnv.yml的依赖更新到默认base环境,不需要修改入口点:
# 替换原有conda env create命令 RUN conda env update -n base -f condaEnv.yml # 原有pip install sagemaker-inference命令不用修改,默认安装到base环境
- 方案3:直接指定虚拟环境的python绝对路径
无需处理环境激活逻辑,直接调用plato_vrar环境下的python解释器即可:
# plato_vrar环境的python默认路径为/opt/conda/envs/plato_vrar/bin/python,直接作为入口点 ENTRYPOINT ["/opt/conda/envs/plato_vrar/bin/python", "/opt/ml/code/inference_code.py"] # 注意此方案下sagemaker-inference也要安装到plato_vrar环境,参考方案1的安装命令
内容的提问来源于stack exchange,提问作者Nitika
相关产品推荐
相关产品推荐

