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
相关产品推荐
相关产品推荐

