为什么文件实际存在时Python仍报FileNotFoundError: [Errno 2]错误?
报错原因
核心原因是相对路径的工作执行上下文不一致:
- 直接在
chatbot_predict.py所在的OurModel目录下执行python chatbot_predict.py时,Python的当前工作目录就是OurModel,相对路径model.sav可以匹配到同目录下的模型文件,所以运行正常。 - 执行
python manage.py runserver启动Django服务时,当前工作目录是manage.py所在的server根目录,代码中的相对路径model.sav会被解析为server/model.sav,但你的模型文件实际存放在server/chat/DistilBertModel/OurModel/路径下,路径不匹配就会触发FileNotFoundError。
修复方案
推荐使用动态拼接绝对路径的方式解决,不会受执行目录影响,修改chatbot_predict.py的模型加载逻辑即可:
import joblib import os # 先获取当前chatbot_predict.py文件的所在目录绝对路径 current_file_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接得到model.sav的完整绝对路径 model_full_path = os.path.join(current_file_dir, 'model.sav') loaded_model = joblib.load(model_full_path) def get_prediction(message, loaded_model=loaded_model): # 原有预测逻辑保留 return prediction
也可以根据项目需求选择其他方案:
- 将模型文件的全路径配置到Django的
settings.py中,加载时从配置项读取,更适合多环境部署场景 - 直接把
model.sav复制到server根目录下,无需修改代码但耦合度高,不推荐长期使用
内容的提问来源于stack exchange,提问作者M.Sajid
相关产品推荐
相关产品推荐

