将cPickle与Flask结合使用时ImportError

时间:2018-07-13 00:19:45

标签: python pickle

为python类创建对象实例后:

inst = ClassName(var1, var2)

注意:因为需要创建实例是一项一次性的任务,并且需要很长时间,所以我需要进行腌制转储。

我做了cPickle转储,例如:

with open("filename.pickle", "w") as output_file:
    cPickle.dump(inst, output_file)

现在,当我以普通的python程序(使用文件中的cPickle.load并使用'python'命令)执行此程序时,它可以完美运行:

with open("filename.pickle", "r") as input_file:
    final_inst = cPickle.load(input_file)

但是,当我在Flask路由中编写SAME代码时,我得到了:

  

ImportError:没有名为ClassName的模块

我需要final_inst才能继续进行

任何帮助将不胜感激。预先感谢!

3 个答案:

答案 0 :(得分:0)

从片段中很难分辨出来,但是泡菜将依赖于全局变量中加载的模块。在将数据释放回类ClassName之前,应将该类导入全局范围。

确保将ClassName导入到与加载函数相同的空间中。在烧瓶中-可以使用相同的文件。您应该绝对导入该类。

from other import ClassName

def some_function():
    with open("filename.pickle", "r") as input_file:
        final_inst = cPickle.load(input_file)
    return FlaskResponse('Thing')

答案 1 :(得分:0)

@csevier马上开始!这是导入错误。谢谢! 首先,我使用以下命令在python控制台中获得ClassName的绝对路径:         导入操作系统         导入ClassName         os.path.abspath(ClassName。文件

在那之后,我在load之前添加了以下代码:         导入系统         sys.path.append('path / to / ClassName')

答案 2 :(得分:0)

这纯粹是一个导入问题。包含类名的模块无法导入,因为python不知道如何找到它。flask应用很可能在venv中运行,该venv指向不同的site-packages目录或类似目录。简单的故障排除步骤是将工作模块中的sys.path列表与不工作的模块进行比较:import sys.path print(sys.path),也可以在每个模块中运行此命令以查看其在物理上的位置。驱动器:打印(从文件来的module_class_name_is_imported_from。)