为什么会发生这种情况?
import window; print "LOADED"; data = cPickle.loads(data)
结果是:
LOADED
Traceback (most recent call last):
...
import window; print "LOADED"; data = cPickle.loads(data)
exceptions.ImportError: No module named window
如果我执行import window
,它会加载模块,但加载cPickle
时,它似乎不起作用。
对于一些可能相关的其他信息:
我保存文件的模块位于project1\MODULE\submodule\main.py
。 window
模块为project1\MODULE\window.py
。 main.py
开始:
import sys
sys.path.append("..\\..")
sys.path.append("..")
...
import window
我尝试加载的模块位于project2\project2sub\MODULE\data.py
,没有弄乱sys
路径。
MODULE
在两种情况下都是相同的:我要加载的模块是project2\project2sub\MODULE\window.py
。
sys.path
可能会以某种方式弄乱这个吗?
答案 0 :(得分:4)
检查以确保您在加载编程中导入类的方式与保存程序中的方法相同。
保存:
import window
myObj.window_obj = window.wObj
装载
import window
myObj = cPickle.loads(data)
不会强>
保存:
from window import wObj
myObj.window_obj = wObj
装载:
import window
myObj = cPickle.loads(data)
答案 1 :(得分:4)
Pickle取决于模块路径。无论你如何加载模块,如果你没有弄乱sys.path
,那么pickle加载和保存应该有效。但是,如果你在一个地方和import module.foo
进行sys.path.append('module'); import foo
,则会有两个不同的模块路径:在第一个实例中,模块路径为module.foo
,而在第二个实例中,它只是foo
1}}。这些并不等同,这将阻止泡菜正常工作。