首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >由于命名空间的原因,在Google Cloud Functions中加载pickle (python)失败

由于命名空间的原因,在Google Cloud Functions中加载pickle (python)失败
EN

Stack Overflow用户
提问于 2019-08-27 17:17:34
回答 1查看 509关注 0票数 3

我正在尝试创建一个GCP云函数,它加载一个要使用的酸洗python对象。

pickle以字节字符串的形式存储。

该函数在加载pickle时失败,错误为:"Can't get attribute 'MyClass' on <module 'google.cloud.functions.worker' from '/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py'>"

因此,我假设问题是由于名称空间引起的,因为当对象创建时,它存储在<module '__main__'>

我发现Unable to load files using pickle and multiple modules很有用,但我认为这两种解决方案都不可能在云函数中实现。

我该如何加载在函数外部进行了酸洗的对象呢?

注意:我的函数中确实有MyClass类。

EN

回答 1

Stack Overflow用户

发布于 2020-01-21 06:04:40

问题是谷歌云函数实际上是从它自己的__main__导入和调用你的代码。所以,当你的main.py中有Myclass时,当你的pickled文件需要__main__.Myclass时,它会显示为main.Myclass。我可以通过简单地将类直接添加到__main__模块中来破解它,方法是在加载您的pickled文件之前执行setattr(sys.modules["__main__"],'MyClass',MyClass)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57671400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档