Djangoでpickleを読み込む時のエラー
Djangoでアプリを作っている時のエラーです。
まず、Djagoとは別のレポジトリであるクラスを作成し、そのインスタンスをpickle形式で保存しました。
そして、Djangoのapp/views.pyでそのクラスをインポートし、さらにpickleデータをloadしようとしました。すると、以下のエラーが出てしまいます。
% python manage.py runserver
Performing system checks...
Unhandled exception in thread started by <function check_errors.
<locals>.wrapper at 0x1058489d8>
Traceback (most recent call last):
File "/Users/you_mac/.pyenv/versions/django_env/lib/python3.5/site-
packages/django/utils/autoreload.py", line 226, in wrapper
fn(*args, **kwargs)
・・・
File "/Users/you_mac/workspace/python/django-app/django-
app/classifier/urls.py", line 2, in <module>
from . import views
File "/Users/you_mac/workspace/python/django-app/django-
app/classifier/views.py", line 13, in <module>
obj = pickle.load(f)
AttributeError: Can't get attribute 'NaiveBayes' on <module '__main__' from 'manage.py'>
ディレクトリの構造はこのようになっています(抽象化しています)。
- django/
- django-app/
- mysite/
- manage.py
- app/
- templates/
- urls.py
- views.py
- src/
- src1.py
- model.pkl
django/src/src1.pyのコードです(わかりやすいようにかなり省略してます)。
import pickle
class NaiveBayes:
def __init__(self, data):
self.data = data
self.dic = {}
def train(self):
for d in self.data:
self.dic[d] += 1
def classify(self, text):
"""辞書を使ってスコアを計算し、クラス分類"""
if __name__ == '__main__':
data = ["a", "b", ...]
cls = NaiveBayes(data)
with open('model.pkl', 'wb') as f:
pickle.dump(cls, f)
django/django-app/app/views.pyです(かなり省略)。
import pickle, sys, os
sys.path.append(os.path.abspath(".") + '/../src')
from src1 import NaiveBayes
path = os.path.abspath("../src")
with open(path+'/model.pkl', 'rb') as f:
obj = pickle.load(f)
obj.train()
def form(request):
category = obj.classify(request.POST['text'])
・・・
ざっくりした説明ですが、解決方法がありましたらご教授ください。