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

Flask REST API部署Apache报错:Target WSGI脚本无法加载为Python模块

解决Flask API部署到Apache时的Flask模块找不到问题

从你的错误日志里的ImportError: No module named flask可以明确看出:mod_wsgi正在使用的Python解释器找不到安装在虚拟环境里的Flask包。咱们一步步来解决这个问题:

1. 修正WSGIDaemonProcess配置,指定虚拟环境

你的ssl.conf里的WSGIDaemonProcess只设置了site-packages路径,但没告诉mod_wsgi要使用虚拟环境的Python解释器。修改这一行配置:

WSGIDaemonProcess myapp python-home=/opt/myapp/venv python-path=/opt/myapp/venv/api threads=5
  • python-home=/opt/myapp/venv:让mod_wsgi切换到你的虚拟环境根目录,直接使用该环境下的Python解释器和已安装的包
  • python-path=/opt/myapp/venv/api:确保你的API代码目录能被Python正确识别

2. 修复Python文件名的命名问题

你的代码文件名为app-code.py,但Python的导入语法不支持带横杠的文件名(会被解析成减号运算符),这是个容易忽略的潜在问题:

  • 先重命名文件:
    mv /opt/myapp/venv/api/app-code.py /opt/myapp/venv/api/app_code.py
    
  • 再修改myapp.wsgi里的导入语句:
    import sys
    sys.path.insert(0, "/opt/myapp/venv/api")
    from app_code import app
    application = app
    

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

如果上面的配置改完还是报错,得检查mod_wsgi编译的Python版本是否和你的虚拟环境(Python3.6)一致:

  • 运行命令查看mod_wsgi关联的Python版本:
    mod_wsgi-express module-config
    
  • 如果输出的是Python2的路径,说明你需要安装针对Python3.6的mod_wsgi模块(比如CentOS下用yum install mod_wsgi-python36,Ubuntu下用apt-get install libapache2-mod-wsgi-py3)

4. 确保Apache用户有访问权限

Apache运行的用户(通常是apache或www-data)需要能读取虚拟环境和代码目录的文件:

chown -R apache:apache /opt/myapp/venv
chmod -R 755 /opt/myapp/venv

5. 重启Apache服务

修改完所有配置后,重启Apache让更改生效:

systemctl restart httpd

做完这些步骤后,再测试你的API应该就能正常访问了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:37:27