pickle无法导入存在的模块?

Cla*_*diu 4 python import module pickle

为什么会发生这种情况?

import window; print "LOADED"; data = cPickle.loads(data)
Run Code Online (Sandbox Code Playgroud)

结果是:

LOADED
Traceback (most recent call last):
...
    import window; print "LOADED"; data = cPickle.loads(data)
exceptions.ImportError: No module named window
Run Code Online (Sandbox Code Playgroud)

如果可以的话import windowcPickle它可以很好地加载模块,但是在加载时似乎不起作用。

有关一些可能相关的其他信息:

我保存文件的模块在中project1\MODULE\submodule\main.py。该window模块project1\MODULE\window.pymain.py开始:

import sys
sys.path.append("..\\..")
sys.path.append("..")
...
import window
Run Code Online (Sandbox Code Playgroud)

我尝试从中加载的模块位于in project2\project2sub\MODULE\data.py,没有弄乱sys路径。

MODULE在两种情况下都是相同的:我要加载的模块是project2\project2sub\MODULE\window.py

可能sys.path以某种方式将附加内容弄乱吗?

And*_*rew 5

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

保存:

 import window
 myObj.window_obj = window.wObj
Run Code Online (Sandbox Code Playgroud)

载入中

 import window
 myObj = cPickle.loads(data)
Run Code Online (Sandbox Code Playgroud)

不:

保存:

 from window import wObj
 myObj.window_obj = wObj
Run Code Online (Sandbox Code Playgroud)

正在加载:

 import window
 myObj = cPickle.loads(data)
Run Code Online (Sandbox Code Playgroud)


Cla*_*diu 5

泡菜取决于模块路径。无论您如何加载模块,如果您不介意的话sys.path,泡菜的加载和保存都应该起作用。但是,如果import module.foo在一个位置执行,则sys.path.append('module'); import foo有两个不同的模块路径:在第一个实例中,模块路径为,module.foo而在第二个实例中,路径为just foo。这些不相等,这将阻止泡菜正常工作。