Flask Python3.8应用Apache部署出现Target WSGI script加载失败错误
问题根因
查看你的Apache启动日志可以直接定位核心问题:日志明确标注mod_wsgi/4.5.17 Python/3.6 configured,你通过apt安装的mod_wsgi模块默认绑定了系统自带的Python3.6版本,和你开发应用使用的Python3.8版本不兼容。dataclasses是Python3.7及以上版本才内置的标准库模块,Python3.6环境中不存在该模块,因此触发了本次报错。
解决方案
按照以下步骤操作即可解决:
- 第一步:卸载系统默认绑定Python3.6的mod_wsgi包
sudo apt-get remove --purge libapache2-mod-wsgi-py3 sudo apt autoremove
- 第二步:安装编译mod_wsgi所需的依赖
sudo apt-get install python3.8-dev apache2-dev
- 第三步:使用Python3.8对应的pip安装绑定Python3.8的mod_wsgi
sudo pip3.8 install mod_wsgi
- 第四步:配置Apache加载新安装的mod_wsgi模块
执行命令mod_wsgi-express module-config,会输出两行配置内容,示例如下:
将输出的内容完整复制,写入到LoadModule wsgi_module "/usr/local/lib/python3.8/dist-packages/mod_wsgi/server/mod_wsgi-py38.so" WSGIPythonHome "/usr"/etc/apache2/mods-available/wsgi.load文件中。 - 第五步:启用模块并重启Apache服务
sudo a2enmod wsgi sudo systemctl restart apache2
额外检查项
确认你所有应用依赖都是通过sudo pip3.8安装,避免不同版本pip将包安装到其他Python版本的路径下,你原有的Apache配置中的python-path参数无需修改。
内容的提问来源于stack exchange,提问作者tony
相关产品推荐
相关产品推荐

