为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
才能继续进行
任何帮助将不胜感激。预先感谢!
答案 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。)