Docker容器已安装flask-login仍报No module named 'flask_login'错误求助
问题原因与解决方案
核心原因
最常见的诱因是执行脚本时使用的Python解释器和你测试导入时用的解释器不是同一个:
- 你直接在容器内执行
python进入交互式终端时,调用的是安装了flask-login的Python 3.9解释器,因此导入正常 - 你直接用
./web_dynamic/db/db_engine.py执行脚本时,会优先使用脚本首行#!(shebang)指定的解释器,如果该解释器没有安装对应依赖,就会抛出ModuleNotFoundError
验证方法
进入容器后,不要直接用./执行脚本,改用以下命令执行,看是否还报错:
python3 /tourmeapp/web_dynamic/db/db_engine.py
如果执行正常,即可确认是shebang配置问题,修改脚本首行为#!/usr/bin/env python3即可解决。
其他需要修正的配置问题
1. Dockerfile冗余错误逻辑
你的Dockerfile里存在无效甚至有风险的配置,建议删除以下两行:
RUN python3 -m pip install flask-login RUN pip3 freeze -> requirements.txt
原因如下:
- 你的
requirements.txt里已经明确包含Flask-Login==0.5.0,不需要额外单独安装 pip3 freeze -> requirements.txt是错误写法,就算修正为>,后续执行COPY . /tourmeapp时,本地的项目文件会直接覆盖你在镜像构建阶段生成的requirements.txt,这行逻辑完全无效- 额外的安装步骤可能引入版本差异,增加依赖冲突风险
2. 构建镜像避免缓存异常
如果修改配置后问题仍然存在,构建镜像时添加--no-cache参数禁用缓存,避免旧的缓存层导致依赖没有正常安装:
docker build --no-cache -t 你的镜像名 .
内容的提问来源于stack exchange,提问作者Vinney
相关产品推荐
相关产品推荐

