Python3+Apache+mod-wsgi环境FileNotFoundError未定义报错排查
报错根因说明
这个报错不是Python2解释器执行代码导致的,是mod_wsgi守护进程在重载/停止的销毁阶段,Python解释器的内置命名空间已经被提前清理,当importlib.resources的清理逻辑抛出FileNotFoundError时,找不到这个Python3内置异常类的定义,才触发的NameError,属于进程退出阶段的非业务异常,所以不会影响正常请求处理。
开启mod_wsgi调试日志的方法
修改Apache配置(主配置httpd.conf或者对应虚拟主机配置均可):
- 调整日志级别,增加mod_wsgi专属日志等级,配置如下:
# 全局配置,wsgi:trace8为最详细的mod_wsgi调试级别,可根据需要调整为trace1-trace8、debug、info等级别 LogLevel info wsgi:trace8
如果是在虚拟主机内配置,直接在<VirtualHost>标签内添加上述配置即可。
2. 重启Apache服务后,错误日志中会输出mod_wsgi全流程的调试信息,包括Python解释器初始化路径、虚拟环境加载状态、进程启停的全阶段动作,可用于确认Python版本加载是否匹配、销毁阶段的具体执行逻辑。
调整方案
- 首先确认mod_wsgi编译使用的Python版本与虚拟环境Python版本完全一致:
执行命令mod_wsgi-express module-config查看编译mod_wsgi对应的Python版本,如果和你虚拟环境的Python3.7不一致,需要重新使用虚拟环境对应的Python3.7版本源码编译安装mod_wsgi。 - 在Apache虚拟主机配置中添加全局应用组配置,避免多解释器实例清理冲突,在
<VirtualHost>标签内添加:
WSGIApplicationGroup %{GLOBAL}
- 若仍存在报错,可在.wsgi入口文件最开头提前导入内置异常,避免清理阶段找不到定义:
from builtins import FileNotFoundError from project import create_app application = create_app()
内容的提问来源于stack exchange,提问作者Flo
相关产品推荐
相关产品推荐

