运行test.py触发FileNotFoundError,Jupyter可正常加载指定路径模型文件
问题解决:Python脚本加载模型文件找不到路径,Jupyter却正常
问题场景
项目目录结构:
src/ model/ Logistic Regression_model.pkl test/ test.py
在test.py中用以下代码加载模型:
logistic_model = joblib.load('../model/Logistic Regression_model.pkl')
运行test.py时报错:
FileNotFoundError: [Errno 2] No such file or directory: '../model/Logistic Regression_model.pkl'
但相同代码在Jupyter Notebook中运行完全正常。
原因分析
Python里的相对路径是基于终端运行脚本时的当前工作目录,而非脚本文件本身所在的目录:
- Jupyter Notebook的工作目录默认是你打开Notebook时的目录(比如在
src/test目录下打开Notebook,工作目录就是src/test),此时../model会正确指向src/model。 - 若在
src目录下直接运行python test/test.py,当前工作目录是src,../model会去src的上级目录查找model文件夹,自然找不到目标文件。
解决方案
方案1:用脚本绝对路径构建模型路径(推荐)
不管在哪运行脚本,都能准确定位模型文件,修改test.py代码如下:
import os import joblib # 获取当前脚本的绝对目录 script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接模型文件路径并标准化(自动处理../这类相对路径) model_path = os.path.normpath(os.path.join(script_dir, '../model/Logistic Regression_model.pkl')) # 加载模型 logistic_model = joblib.load(model_path)
方案2:切换到脚本所在目录再运行
打开终端,先进入test.py所在的目录,再执行脚本:
cd src/test python test.py
此时相对路径../model会正确指向src/model,即可找到模型文件。
内容的提问来源于stack exchange,提问作者ayberkgezer
相关产品推荐
相关产品推荐

