Возникло исключение: ModuleNotFoundError при откреплении объектов (с использованием укропа, маринада или JobLib) - PullRequest
0 голосов
/ 23 марта 2019

Я установил конвейер sklearn, и теперь, когда мне нужно его развернуть, я протравил свой конвейер (пробовал Joblib и укроп тоже).Когда я распаковываю его в другой среде, в которой есть та же версия укропа, маринада и питона, у меня появляется эта ошибка:

exception has occurred: ModuleNotFoundError
No module named '_regex'
  File "\opt\miniconda\lib\python3.6\site-packages\dill\_dill.py", line 832, in _import_module
  File "\opt\miniconda\lib\python3.6\site-packages\dill\_dill.py", line 305, in load
  File "C:\<edited>\score.py", line 40, in init
  File "C:\<edited>\score.py", line 90, in <module>
  File "\opt\miniconda\lib\python3.6\runpy.py", line 85, in _run_code
  File "\opt\miniconda\lib\python3.6\runpy.py", line 96, in _run_module_code
  File "\opt\miniconda\lib\python3.6\runpy.py", line 263, in run_path
  File "\opt\miniconda\lib\python3.6\runpy.py", line 85, in _run_code
  File "\opt\miniconda\lib\python3.6\runpy.py", line 193, in _run_module_as_main

Это неясно для меня, что вызывает это.Я могу распаковать файл в моей локальной среде, но не в целевой среде.

import dill as pickle
pickle._dill._reverse_typemap['ClassType'] = type

with open(prep_transformer_path, 'rb') as file:
    prep_transformer = pickle.loads(file)

Это в основном код, который вызывает ошибку на непривлекательной стороне жизни.Любая подсказка, что я мог бы пропустить?Я должен был добавить вещь типа карты из-за другой проблемы, которую я решил до этого.

И это травит дюжину самодельных классов, приспособленных к Transformer.

Код травления следующий:

import dill as pickle

# Dump the prep pkl file
with open(os.path.join(output_models_directory, 'prep.pkl'), 'wb') as file:
    pickle.dump(trainingPrepPipe, file, protocol=pickle.HIGHEST_PROTOCOL)

Заранее спасибо за любую помощь!

1 Ответ

1 голос
/ 23 марта 2019

Я столкнулся с подобной проблемой при сохранении конвейеров (используя sklearn.joblib). Оказывается, joblib не хранит код, используемый вашим конвейером. В моем случае проблема была решена путем обеспечения доступности всех модулей python, используемых в конвейере и / или классификаторе, в одном месте относительно модуля создания конвейера.

Для меня это означало копирование и сохранение my_transformers.py вместе с конвейером и классификационными заданиями. Затем, при использовании / установке их в производственном процессе, поместите my_transformers.py в то же место относительно модуля, который создал мой конвейер.

...