You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache+mod_wsgi-py3部署Flask遇ModuleNotFoundError问题求助

解决mod_wsgi无法找到虚拟环境中Flask模块的问题

我之前也碰到过几乎一模一样的坑,咱们一步步来排查解决:

1. 确认mod_wsgi的Python版本与虚拟环境匹配

首先要确保你安装的libapache2-mod-wsgi-py3和虚拟环境的Python版本一致,这是最常见的版本不匹配问题:

  • 运行命令:mod_wsgi-express module-config
  • 查看输出里的LoadModule路径,比如如果输出是LoadModule wsgi_module "/usr/lib/apache2/modules/mod_wsgi-py36.so",说明是Python3.6的mod_wsgi,和你的虚拟环境版本匹配;如果是其他版本(比如3.7),那你需要重新安装对应版本的mod_wsgi,或者调整虚拟环境到匹配的Python版本。

2. 修正WSGIDaemonProcess的配置格式

你的配置里有个关键错误:WSGIDaemonProcess的第一个参数应该是进程名称,而不是路径!正确的配置应该是这样:

# 给进程起个自定义名称,比如appsummarization
WSGIDaemonProcess appsummarization python-path=/var/www/html/textsummarization:/var/www/html/venv3.6/lib/python3.6/site-packages
# 指定使用上面定义的进程组
WSGIScriptAlias /app3 /var/www/html/textsummarization/app.wsgi process-group=appsummarization
<Directory /var/www/html/textsummarization/>
    Order allow,deny
    Allow from all
</Directory>

原来的写法把/app3作为进程名,会导致mod_wsgi无法正确识别虚拟环境的路径配置。

3. 确保Apache用户有权限访问虚拟环境

Apache默认以www-data用户运行,要确保这个用户能读取虚拟环境的site-packages目录:

  • 运行命令检查权限:ls -ld /var/www/html/venv3.6/lib/python3.6/site-packages/
  • 如果权限不足,执行:sudo chown -R www-data:www-data /var/www/html/venv3.6/(或者至少开放读权限:sudo chmod -R 755 /var/www/html/venv3.6/)

4. 在app.wsgi中手动激活虚拟环境

如果上面的配置还是不行,可以直接在WSGI脚本里强制激活虚拟环境,这是最稳妥的兜底方案:
修改/var/www/html/textsummarization/app.wsgi内容为:

# 激活虚拟环境
activate_this = '/var/www/html/venv3.6/bin/activate_this.py'
with open(activate_this) as file_:
    exec(file_.read(), dict(__file__=activate_this))

# 添加项目目录到Python路径
import sys
sys.path.insert(0, '/var/www/html/textsummarization')

# 导入Flask应用
from app import app as application

5. 重启Apache并验证

每次修改配置或脚本后,一定要重启Apache生效:

sudo systemctl restart apache2

然后访问你的应用,如果还是出错,查看Apache错误日志:tail -f /var/log/apache2/error.log,根据新的错误信息进一步排查。

内容的提问来源于stack exchange,提问作者user2129623

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:07:15