繁体   English   中英

pickle无法导入存在的模块?

[英]pickle can't import a module that exists?

为什么会这样?

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 ,pickle加载和保存应该工作。 但是,如果你在一个地方import module.foo ,并且sys.path.append('module'); import foo sys.path.append('module'); import foo ,你有两个不同的模块路径:在第一个实例中,模块路径是module.foo而在第二个实例中,它只是foo 这些并不等同,这将阻止泡菜正常工作。

检查以确保您在加载编程中导入类的方式与在保存程序中的方式相同。

保存:

 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM