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

如何在Railway平台部署含pickle模型的Django项目?

在Railway部署含Pickle模型的Django项目:解决文件找不到问题

问题重现

在Railway部署Django项目时,加载pickle格式的机器学习模型时持续报错FileNotFoundError,即使模型文件已存在于GitHub仓库中:

  • 尝试直接加载根目录模型:
    binary_clf = joblib.load(os.path.abspath('binary_classifier.pkl'))
    
    报错:No such file or directory: '/app/binary_classifier.pkl'
  • 尝试放入static目录加载:
    binary_clf = joblib.load("static/binary_classifier.pkl")
    
    报错:No such file or directory: 'static/binary_classifier.pkl'

项目结构如下:

baby_cry_proj/
├── baby_cry/
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── forms.py
│   ├── migrations
│   ├── models.py
│   ├── tests.py
│   ├── urls.py
│   ├── views.py
│   └── __init__.py
├── core/
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── forms.py
│   ├── migrations
│   ├── models.py
│   ├── templates/
│   │   ├── base.html
│   │   ├── index.html
│   │   └── ... 
│   ├── tests.py
│   ├── urls.py
│   ├── views.py (调用binary_classifier.pkl的文件)
│   └── __init__.py
├── env
├── manage.py
├── Procfile
├── requirements.txt
├── settings.py
├── static/
│   ├── binary_classifier.pkl
├── staticfiles/
├── admin/
│   ├── binary_classifier.pkl
└── binary_classifier.pkl

解决方案

核心问题是依赖相对路径导致部署环境路径不匹配,Railway的容器工作目录可能和本地开发环境不一致,必须用Django内置的路径常量来构建绝对路径。

1. 规范模型文件存放位置

不建议将机器学习模型放入static目录(该目录专为CSS/JS/图片等前端静态资源设计),推荐两种存放方式:

  • 方式一:在项目根目录新建ml_models文件夹,将模型放入其中
  • 方式二:将模型直接放在调用它的core app目录下

2. 使用Django的BASE_DIR构建绝对路径

在core/views.py中,通过settings.BASE_DIR(项目根目录的绝对路径)来拼接模型文件路径,确保在任何环境下都能正确找到文件:

若模型放在项目根目录的ml_models文件夹:

from django.conf import settings
import os
import joblib

# 构建模型绝对路径
model_path = os.path.join(settings.BASE_DIR, 'ml_models', 'binary_classifier.pkl')
binary_clf = joblib.load(model_path)

若模型放在core app目录下:

import os
import joblib

# 基于当前views.py文件的路径构建模型路径
model_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'binary_classifier.pkl')
binary_clf = joblib.load(model_path)

3. 检查.gitignore规则

确保模型文件没有被Git忽略:

  • 打开项目根目录的.gitignore文件,删除*.pkl、static/等可能排除模型文件的规则
  • 执行git add binary_classifier.pkl(或对应路径的模型文件),提交并推送到GitHub,确保Railway能拉取到该文件

4. 验证部署环境路径(可选调试)

如果仍有问题,可在views.py中添加调试代码,查看Railway容器中的实际路径:

import os
from django.conf import settings

print("当前工作目录:", os.getcwd())
print("项目根目录BASE_DIR:", settings.BASE_DIR)

查看Railway的部署日志,确认路径是否与预期一致,进一步排查问题。

内容的提问来源于stack exchange,提问作者Galym

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 18:07:48