RHEL8下Apache部署Flask时WSGI忽略python-home虚拟环境问题
解决Apache WSGI无法加载虚拟环境模块的问题
检查文件权限
- 确保虚拟环境目录及下属文件、子目录的权限允许
apache用户读取执行:chown -R apache:apache /var/www/FLASKAPPS/myapp/venv chmod -R 755 /var/www/FLASKAPPS/myapp/venv - 若虚拟环境由root用户创建,
apache用户大概率没有访问权限,必须修正所有权。
明确指定Python路径
部分场景下python-home识别可能异常,可尝试在WSGIDaemonProcess中补充python-path参数:
WSGIDaemonProcess myapp user=apache group=apache threads=5 python-home=/var/www/FLASKAPPS/myapp/venv python-path=/var/www/FLASKAPPS/myapp/venv/lib/python3.6/site-packages WSGIProcessGroup myapp
二次验证WSGI模块关联的Python版本
即使确认过适配性,仍可通过命令再次核对:
# 查看mod_wsgi编译时绑定的Python路径 mod_wsgi-express module-config # 查看系统Python3.6的执行路径 python3.6 -c "import sys; print(sys.executable)"
确保两者主版本一致,路径匹配。
在WSGI脚本中强制激活虚拟环境
在Flask应用的WSGI入口脚本(如myapp.wsgi)开头添加以下代码,强制指定使用虚拟环境的Python环境:
activate_this = '/var/www/FLASKAPPS/myapp/venv/bin/activate_this.py' with open(activate_this) as file_: exec(file_.read(), dict(__file__=activate_this)) # 后续导入你的Flask应用 from myapp import app as application
调整SELinux上下文
RHEL8默认启用SELinux,可能阻止Apache访问虚拟环境目录,执行以下命令修复:
chcon -R -t httpd_sys_content_t /var/www/FLASKAPPS/myapp/venv # 若应用需要写入权限,再执行下方命令 chcon -R -t httpd_sys_rw_content_t /var/www/FLASKAPPS/myapp
内容的提问来源于stack exchange,提问作者Wige
相关产品推荐
相关产品推荐

