Conda虚拟环境运行项目报ModuleNotFoundError: No module named 'flask'咨询
问题解决方案
主要问题(找不到flask模块)修复
根因
你遇到的核心问题是启动脚本调用的gunicorn不属于当前激活的conda虚拟环境:全局安装的gunicorn绑定了系统全局的Python解释器,只会读取全局路径下的依赖包,无法识别conda虚拟环境内安装的flask。你用apt全局安装python3-flask后能正常运行,也侧面印证了这个判断。
修复步骤
- 先确认路径匹配问题
激活虚拟环境后依次执行以下命令,确认输出路径均指向你当前使用的conda虚拟环境目录(通常为~/miniconda3/envs/你的环境名/bin/xxx):
which python which pip which gunicorn
如果gunicorn的输出路径不属于虚拟环境目录,就可以确定是该问题。
- 修复脚本执行逻辑
- 首先在启动脚本开头添加conda初始化配置,解决
conda activate无法在脚本中生效的问题:
# 替换为你本地miniconda/anaconda的实际安装路径下的profile.d/conda.sh source ~/miniconda3/etc/profile.d/conda.sh conda activate 你的虚拟环境名称- 在虚拟环境内重新安装gunicorn,确保它绑定虚拟环境的Python解释器:
pip install gunicorn- 启动命令优先使用虚拟环境Python的模块调用方式,彻底避免调用到全局gunicorn:
exec python -m gunicorn -b 0.0.0.0:5000 myapp:app - 首先在启动脚本开头添加conda初始化配置,解决
附加问题(依赖文件管理)解答
两个依赖文件的作用
environment.yml是conda生态专用的配置文件,可同时声明conda源依赖、Python版本、pip源依赖,仅适合使用conda管理环境的用户requirements.txt是pip通用的依赖声明文件,无conda依赖,所有Python开发者都可以直接使用
多数遗留项目同时提供两份文件,是为了覆盖不同使用习惯的开发者,不属于冗余配置。
整合/删除方案
- 不建议直接删除
requirements.txt,除非你确认团队所有成员都统一使用conda管理环境 - 可以通过修改
environment.yml实现两份文件的自动同步,不需要两边重复维护,只需在yml的dependencies节点下添加pip段指向requirements.txt即可,示例如下:
name: 你的环境名 channels: - defaults dependencies: - python=3.8 - 其他conda安装的依赖 - pip - pip: - -r requirements.txt
配置完成后执行conda env create -f environment.yml时,会自动读取requirements.txt的内容安装pip依赖,仅需维护requirements.txt一份文件即可。
内容的提问来源于stack exchange,提问作者Ville Myrskyneva
相关产品推荐
相关产品推荐

