You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

排查PythonAnywhere中模型文件加载失败问题

解决PythonAnywhere部署中joblib加载模型的KeyError: 0问题

我在PythonAnywhere部署的应用中,尝试读取训练好的模型文件并在最终流程中使用时,遇到了如下错误。我已经多次更新依赖库、修正文件路径,但部署仍未成功,恳请协助解决:

2024-11-04 21:12:35,262: Exception on /sonucum [GET]
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/flask/app.py", line 2077, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.9/site-packages/flask/app.py", line 1525, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.9/site-packages/flask/app.py", line 1523, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.9/site-packages/flask/app.py", line 1509, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
  File "/home/mypersonalityinventory/mysite/flask_app.py", line 1260, in sonucum
    genel_sonuc()
  File "/home/mypersonalityinventory/mysite/flask_app.py", line 792, in genel_sonuc
    model = joblib.load(lfk_model_path)
  File "/usr/local/lib/python3.9/site-packages/joblib/numpy_pickle.py", line 587, in load
    obj = _unpickle(fobj, filename, mmap_mode)
  File "/usr/local/lib/python3.9/site-packages/joblib/numpy_pickle.py", line 506, in _unpickle
    obj = unpickler.load()
  File "/usr/local/lib/python3.9/pickle.py", line 1212, in load
    dispatch[key[0]](self)
KeyError: 0

解决方法

  • 检查模型文件完整性
    上传到PythonAnywhere的模型文件可能因传输中断损坏,导致加载时解析失败。重新上传文件,上传时确保使用二进制传输模式(如FTP的binary模式,或PythonAnywhere文件管理器直接拖拽时确认文件上传完成)。可以在代码中添加文件存在性检查:

    import os
    lfk_model_path = "/home/mypersonalityinventory/mysite/your_model_file.joblib"
    if not os.path.exists(lfk_model_path):
        raise FileNotFoundError(f"模型文件不存在:{lfk_model_path}")
    model = joblib.load(lfk_model_path)
    
  • 统一训练与部署环境的依赖版本
    训练模型时使用的joblib、scikit-learn等依赖版本必须和PythonAnywhere部署环境完全一致,版本不匹配会导致序列化/反序列化失败。

    1. 在训练环境执行pip freeze > requirements.txt,导出所有依赖的精确版本。
    2. 在PythonAnywhere的虚拟环境中执行pip install -r requirements.txt,安装完全匹配的依赖。
    3. 若只想单独指定关键依赖版本,例如:
      pip install joblib==1.3.2 scikit-learn==1.2.2
      
  • 适配Pickle协议版本
    如果训练模型的Python版本(如3.10+)高于PythonAnywhere的版本(这里是3.9),会因Pickle协议版本不兼容引发错误。

    1. 方案一:在Python 3.9环境中重新训练并保存模型。
    2. 方案二:保存模型时指定兼容的协议版本(Python 3.4+支持协议4,兼容3.9):
      joblib.dump(model, "model.joblib", protocol=4)
      
  • 再次验证文件路径
    即使已修正路径,仍可以在代码中打印路径和当前工作目录,确认路径正确性:

    import os
    print("模型文件路径:", lfk_model_path)
    print("当前工作目录:", os.getcwd())
    

    确保使用的是绝对路径,且文件确实存在于该位置。


内容的提问来源于stack exchange,提问作者Özge Üstüner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 16:07:40