为何`flask_bootstrap`导入失败?Apache2部署Flask应用模块找不到报错
解决Apache2 + mod_wsgi运行Flask应用时找不到flask_bootstrap的问题
从你贴的Apache error.log内容来看,有两个核心问题需要解决,咱们一步步排查:
1. 先搞定mod_wsgi的Python版本不匹配警告
[wsgi:warn] mod_wsgi: 编译版本为Python/2.7.11。
[wsgi:warn] mod_wsgi: 运行时使用Python/2.7.12。
这个警告可不是小问题——mod_wsgi是基于Python 2.7.11编译的,但当前系统跑的是2.7.12,版本不一致会直接导致Python模块路径识别混乱,很大概率是你找不到flask_bootstrap的诱因。解决方法如下:
- 卸载现有mod_wsgi,用系统当前的Python 2.7.12重新编译安装:
# 卸载系统自带的mod_wsgi sudo apt remove libapache2-mod-wsgi # 安装编译依赖 sudo apt install python-dev apache2-dev # 用当前Python的pip安装mod_wsgi(确保用的是Python2.7.12的pip) sudo pip install mod_wsgi # 将mod_wsgi模块配置到Apache sudo mod_wsgi-express module-config | sudo tee /etc/apache2/mods-available/wsgi.load # 启用模块并重启Apache sudo a2enmod wsgi sudo systemctl restart apache2 - 如果不想源码编译,也可以找对应Python2.7.12的mod_wsgi系统包,但源码编译的匹配度最高,更推荐。
2. 解决flask_bootstrap模块找不到的问题
模块找不到本质就是mod_wsgi使用的Python环境里没装这个包,分两种情况处理:
情况一:没有用虚拟环境
- 先确认当前运行的Python2对应的pip路径:
which pip2 - 用这个pip安装flask_bootstrap:
sudo $(which pip2) install flask-bootstrap
情况二:用了虚拟环境
如果你的Flask应用是在虚拟环境里开发的,那必须让mod_wsgi加载虚拟环境的依赖。打开你的WSGI脚本/var/www/myapp/myapp.wsgi,在开头添加以下代码:
# 替换成你虚拟环境的实际路径 activate_this = '/your/venv/path/bin/activate_this.py' exec(open(activate_this).read(), dict(__file__=activate_this))
这样mod_wsgi就会使用虚拟环境里的Python和依赖包了。
最后验证
做完以上操作后,重启Apache:
sudo systemctl restart apache2
然后查看error.log确认是否还有错误:
sudo tail -f /var/log/apache2/error.log
如果没有报错,访问你的应用应该就能正常加载flask_bootstrap了。
内容的提问来源于stack exchange,提问作者Bridgey
相关产品推荐
相关产品推荐

