Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 出现异常:取消勾选对象时发生ModuleNotFoundError(使用dill、pickle或joblib)_Python_Scikit Learn_Pickle_Joblib_Dill - Fatal编程技术网

Python 出现异常:取消勾选对象时发生ModuleNotFoundError(使用dill、pickle或joblib)

Python 出现异常:取消勾选对象时发生ModuleNotFoundError(使用dill、pickle或joblib),python,scikit-learn,pickle,joblib,dill,Python,Scikit Learn,Pickle,Joblib,Dill,我安装了一个sklearn管道,现在我需要部署它,我已经修改了管道(也尝试了joblib和dill)。当我在另一个具有相同版本的dill、pickle和python的环境中取消pickle时,出现以下错误: exception has occurred: ModuleNotFoundError No module named '_regex' File "\opt\miniconda\lib\python3.6\site-packages\dill\_dill.py", line 832,

我安装了一个sklearn管道,现在我需要部署它,我已经修改了管道(也尝试了joblib和dill)。当我在另一个具有相同版本的dill、pickle和python的环境中取消pickle时,出现以下错误:

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
这基本上就是导致生活中不愉快的一面出现错误的代码。你知道我可能忽略了什么吗?我不得不添加typemap,因为在此之前我解决了另一个问题

它正在酸洗十几个国产变压器安装类

酸洗代码如下所示:

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)

提前感谢您的帮助

我在保存管道(使用sklearn.joblib)时遇到了类似的问题。事实证明,joblib不存储管道使用的任何代码。在我的例子中,通过确保在生产中,管道和/或分类器中使用的所有python模块都可用,并且位于相对于管道创建模块的相同位置,问题得到了解决


对我来说,这意味着复制和保存我的_transformers.py以及管道和分类器JobLib。然后在生产中使用/安装它们时,将我的_transformers.py放在创建管道的模块所在的同一位置。

最初,我没有包含自己的自定义类,并且由于许多其他原因失败,所以我按照您的建议将它们都包含在transformer.py中,它解决了许多问题,但我仍然坚持这一点。但是,我还没有在培训代码中包含所有导入内容(变形金刚没有提到的那些不在那里。也许我遗漏了什么,但例如,
import re
是否存在……您的生产环境是否与培训环境相同?也就是说,具有所有相同的依赖项和相同版本的依赖项。这将是我下一步要检查的地方。)为了解决这个问题,我在两个环境中都运行了pip冻结,这两个环境在重要的软件包(numpy、spacy和其他软件包)上有很大的差异。我没有尝试所有的软件包组合来修复它,但明显的最佳实践是有效的。谢谢!
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)