cPickle 导入错误
ImportError with cPickle
我查看了对相关 cPickle 问题的各种回复,但 none 似乎有所帮助。使用 cloudpickle 而不是 cPickle 也不行。
我有一个名为 MyModule 的模块,它定义了一个 class MyClass
首先,我 运行 在与我的项目文件夹不同的文件夹中放置了一个脚本。我从项目中导入自己的 class MyClass,创建 class 的实例并在目标路径中腌制它。
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; print sys.path
并检查一下。
我查看了对相关 cPickle 问题的各种回复,但 none 似乎有所帮助。使用 cloudpickle 而不是 cPickle 也不行。
我有一个名为 MyModule 的模块,它定义了一个 class MyClass
首先,我 运行 在与我的项目文件夹不同的文件夹中放置了一个脚本。我从项目中导入自己的 class MyClass,创建 class 的实例并在目标路径中腌制它。
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; print sys.path
并检查一下。