带有cPickle

时间:2015-10-20 14:18:01

标签: python pickle importerror

我查看了相关cPickle问题的各种回复,但似乎没有任何帮助。也没有使用cloudpickle而不是cPickle。

我有一个名为MyModule的模块,它定义了一个MyClass类

首先,我在项目文件夹的不同文件夹中运行脚本。我从项目中导入自己的类MyClass,创建类的实例并在目标路径上进行pickle。

sys.path.append(os.path.join(os.environ.get("PROJECT_ROOT"), 'src/'))
from MyModule import MyClass
class_instance = MyClass()
with gzip.open(os.path.join(target_path, 'net.p.gz'), "wb") as f:
    cPickle.dump(class_instance, f)

然后,在我的主项目中,我想加载pickle文件

from MyModule import MyClass
with gzip.open(os.path.join(os.environ['PROJECT_ROOT'], 'resources/net.p.gz'), 'rb') as f:
        class_instance = cPickle.load(f)

这导致

ImportError: No module named MyModule

然而

test_instance = MyClass()
print (test_instance)

在同一个文件中打印

<MyModule.MyClass object at 0x7fad03e3ead0>

所以模块显然存在并且被压制了。

两次我指的是同一个模块,它不会改变位置。我错过了什么?

1 个答案:

答案 0 :(得分:1)

我们在这里说你有MyModule:~/work/repo/my_module.py。如果你想要from MyModule import MyClass工作,那么你必须在python路径上有这个:~/work/repo。尝试import sys; print sys.path并查看它。