PythonAnywhere部署Flask应用遇FileNotFoundError:模型文件存在仍报错
排查PythonAnywhere部署Flask垃圾邮件检测应用时的FileNotFoundError问题
问题背景
部署在PythonAnywhere的Flask垃圾邮件检测应用触发FileNotFoundError,报错指向
spamdetector.py第8行加载spam_detector_model2.joblib模型文件的代码,但该文件确实存在于项目目录中;joblib及其他依赖包已确认安装完成。
排查步骤
- 使用绝对路径加载模型
PythonAnywhere的运行环境工作路径可能和本地开发环境不一致,避免使用相对路径。可以借助Flask提供的应用根路径拼接绝对路径,示例代码:from flask import current_app import joblib # 替换原加载代码为绝对路径写法 model_file_path = f"{current_app.root_path}/spam_detector_model2.joblib" model = joblib.load(model_file_path) - 核对文件名大小写
PythonAnywhere基于Linux系统,文件名区分大小写。检查代码中指定的文件名和实际文件的大小写是否完全匹配,比如Spam_Detector_Model2.joblib与spam_detector_model2.joblib会被系统判定为不同文件。 - 确认文件实际位置
登录PythonAnywhere控制台,进入项目根目录执行ls -l命令,查看文件列表,确保spam_detector_model2.joblib确实位于Flask应用的根目录下,而非子目录或其他路径。 - 检查文件读取权限
确保Web应用运行用户拥有模型文件的读取权限。执行ls -l spam_detector_model2.joblib查看权限配置,需保证权限位包含r(如-rw-r--r--)。若权限不足,执行chmod 644 spam_detector_model2.joblib调整权限。 - 查看完整错误日志路径
进入PythonAnywhere的Web应用管理页面,查看完整错误日志,确认报错提示的文件路径,对比实际文件的存储路径是否一致——相对路径可能因应用启动目录问题指向错误位置。
内容的提问来源于stack exchange,提问作者Ese Amadasun
相关产品推荐
相关产品推荐

