【发布时间】:2021-05-01 03:47:47
【问题描述】:
我正在尝试在我的机器学习 API 上加载一个 pickle 文件,但我不断收到路径错误。
model = pickle.load(open(scaler_filepath, 'rb'))
但由于某种原因,我收到一个错误,即找不到文件:FileNotFoundError: [Errno 2] No such file or directory: '..\\..\\models\\lr_scaler.pkl'
这就是我加载泡菜文件的方式:
model_path = os.path.join(os.path.pardir,os.path.pardir,'models')
scaler_filepath = os.path.join(model_path, 'lr_scaler.pkl')
model_filepath = os.path.join(model_path, 'lr_model.pkl')
scaler = pickle.load(open(scaler_filepath, 'rb'))
model = pickle.load(open(model_filepath, 'rb'))
这给了我 FileNotFoundError。将路径设置为原始字符串也不起作用,但有趣的是,如果我打印以检查路径:
print(model_filepath)
print(os.path.getsize(scaler_filepath))
它返回正确的路径和文件大小:
..\..\models\lr_model.pkl
1227
所以看起来路径是正确的,但由于某种原因,当我在 pickle.load() 中打开它们时它们不起作用
即使使用原始字符串
scaler = pickle.load(open(r'..\..\models\lr_scaler.pkl', 'rb'))
model = pickle.load(open(r'..\..\models\lr_model.pkl', 'rb'))
我仍然得到:[Errno 2] 没有这样的文件或目录:'..\\..\\models\\lr_scaler.pkl'
并将 \ 切换到 / 也不起作用。不知道还能做什么:(
编辑:
如果我用print(os.path.exists(model_filepath)) 检查路径,就会发生这种情况:
True
True
* Serving Flask app "machine_learning_api" (lazy loading)
* Environment: development
* Debug mode: on
* Restarting with stat
False
False
我得到了 FileNotFoundError
【问题讨论】:
-
很不清楚的问题...请edit您的问题提供minimal reproducible example。
-
如果您能够使用您的操作系统找到该文件,如果您将文件复制到其他路径并尝试从该路径打开它会发生什么?
-
@KarlKnechtel 这很不友好。 OP 展示了
os.path.getsize()如何报告文件的正确大小,因此我们知道文件存在于文件系统中。因此,让我们帮助 OP 找出为什么os.path.getsize()和pickle.load()看待事物的方式不同。 -
@Remssett_HP 话虽如此,我还是要问一个愚蠢的问题:你证明
os.path.getsize()看到lr_model.pkl,但你也可以用它看到lr_scaler.pkl吗?我尝试重现您的问题没有奏效 - 我刚刚创建的带有泡菜文件的类似代码工作得很好。 -
好的,这是可以调查的问题。下一步是调试在重新启动过程中出现问题的位置。您还可以检查当前工作目录是否已更改。
标签: python python-3.x encoding pickle