python - cPickle 的导入错误

标签 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)

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

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>

所以该模块显然已经存在并且正在被改进。

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

最佳答案

假设您在这里有 MyModule:~/work/repo/my_module.py。如果您希望 from MyModule import MyClass 正常工作,那么您必须将其放在 python 路径中:~/work/repo。尝试执行 import sys;打印 sys.path 并检查一下。

关于python - cPickle 的导入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33239169/

相关文章:

python - 将唯一 id 分配给 python 中的列表列表,其中重复项获得相同的 id

python - 在 for 循环中创建嵌套字典

python - 如何获取python异常发生的实际行号?

python - 向 Python 类添加属性时如何更新 pickle 对象

python - ImportError:libSM.so.6:无法打开共享对象文件:没有这样的文件或目录

java - android.support.v7.internal.widget.AdapterViewICS 类型不可见

python - 使用 "pythonw"(而不是 "python")运行应用程序时找不到模块

python - 如何在迭代生成数据帧时保存数据帧列表?

Python 分布式计算(有效)

python - 为什么此导入序列会生成错误?