簡體   English   中英

由於命名空間,在 Google Cloud Functions 中加載 pickle (python) 失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM