EC2 Apache2部署Flask应用处理WSGI脚本出现ModuleNotFoundError报错求助
问题根因
错误日志返回的ModuleNotFoundError: No module named 'flask'核心原因是Apache的mod_wsgi模块调用的Python解释器,和你安装Flask依赖的Python环境不匹配,本地可正常运行是因为本地触发项目用的是已经装好依赖的对应环境,服务器上环境配置没有对齐。
排查&解决步骤
- 确认mod_wsgi对应的Python版本
先执行apache2ctl -M | grep wsgi确认wsgi模块已加载,再检查你安装的mod_wsgi适配版本:Debian/Ubuntu系默认libapache2-mod-wsgi是适配Python2的版本,要适配Python3需要安装对应版本包,操作命令如下:# 卸载Python2版本的wsgi模块 sudo apt remove libapache2-mod-wsgi # 安装Python3版本的wsgi模块 sudo apt install libapache2-mod-wsgi-py3 # 重启Apache生效 sudo systemctl restart apache2 - 对齐WSGI使用的Python环境
如果你项目用了虚拟环境,需要在000-default.conf的WSGIDaemonProcess配置项中指定虚拟环境路径,比如你的虚拟环境存放在/var/www/html/disco/venv,就将原有配置项修改为:
如果你没有用虚拟环境,直接在全局安装依赖,需要确认你是用WSGIDaemonProcess disco threads=5 python-home=/var/www/html/disco/venv python-path=/var/www/html/discopip3 install flask安装的依赖,而非对应Python2的pip安装,可执行pip3 list | grep flask验证Flask已在全局Python3环境中安装。 - 修正项目目录权限
确认Apache运行用户(默认是www-data)有项目目录的读取权限,执行命令:sudo chown -R www-data:www-data /var/www/html/disco sudo chmod -R 755 /var/www/html/disco - 重启Apache验证
所有配置修改完成后执行sudo systemctl restart apache2,再次访问服务验证是否正常运行。
内容的提问来源于stack exchange,提问作者pulin kumar Sahu
相关产品推荐
相关产品推荐

