pickle无法导入存在的模块?
为什么会发生这种情况?pickle无法导入存在的模块?
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
附加搞砸了吗?
Pickle依赖于模块路径。无论你如何加载模块,如果你不惹sys.path
,咸菜加载和保存应该工作。但是,如果您在一个位置执行import module.foo
,并且执行了sys.path.append('module'); import foo
,则您有两个不同的模块路径:首先模块路径为module.foo
,而第二个模块路径仅为foo
。这些都不相同,会阻止腌菜正常工作。
检查,以确保你以同样的方式导入在装载编程类作为您在节省程序。
保存:
import window
myObj.window_obj = window.wObj
加载
import window
myObj = cPickle.loads(data)
NOT:
保存:
from window import wObj
myObj.window_obj = wObj
加载:
import window
myObj = cPickle.loads(data)
我有一种感觉,这两种工作。我认为问题在于我在'import module.foo'中(有效地)。在另一个我'sys.path.append('模块');导入foo'(有效)。因此路径是不同的('foo'和'module/foo'),这就是搞砸了。 – Claudiu 2011-05-18 21:11:12
@Claudiu: 我有同样的问题(和解决方案),你可以发布这个答案,并接受它? (所以别人可以找到) – 2014-03-15 14:23:09
** IN **'data'是什么?什么是腌制? – Andrew 2011-05-18 20:23:51