[英]Loading pickle (python) in Google Cloud Functions fails due to namespace
我正在嘗試創建一個 GCP 雲函數,它加載一個腌制的 python 對象以供使用。
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__'>
我發現無法使用 pickle 和多個模塊加載文件,這很有用,但我認為這兩種解決方案都無法在雲函數中實現。
我將如何加載在函數外部腌制的腌制對象?
注意我在函數中有 MyClass 類。
問題是谷歌雲函數實際上是從它自己的__main__
導入和調用你的代碼。 因此,當您在main.py
有 Myclass 時,當您腌制文件期待__main__.Myclass
時,它將顯示為main.Myclass
。 我能夠通過在加載腌制文件之前通過執行setattr(sys.modules["__main__"],'MyClass',MyClass)
將類直接添加到__main__
模塊來破解它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.