ラズパイにGoogle Cloud SDKを使おうとしたら...
今回は、Raspberry Pi上のPython仮想環境(Python 3.11)でGoogle TTSを使用するために、Google Cloud SDKを使おうとしたところ、謎のエラーに遭遇しました。このエラーは、Google Cloud SDKのアップデート中に発生しました。
Raspberry Piなどの限られたリソースのデバイスでSDKを動かす場合や、特定のバージョンのPythonで開発を進める場合に、同様の問題に出くわすかもしれません。以下にその解決方法をまとめておきます。
どんなエラーが出たの?
Google Cloud SDKをインストールして、アップデートしようとしたときにこんなエラーが出ました。
ERROR: gcloud crashed (AttributeError): module 'google._upb._message' has no attribute 'MessageMapContainer'
「MessageMapContainerがない」と言われても、なんのことやら…
なぜこのエラーが起こるの?
調べてみると、このエラーは Google Cloud SDKの内部で使っているライブラリ(protobufとか)にバージョンの不一致がある せいで発生するらしい。
簡単に言えば、SDKの部品たちが「お前、ちょっと古くない?」って喧嘩してる ような感じです。
解決方法
解決方法は簡単!SDKで使っているライブラリのバージョンを調整してあげればOKです。
手順
- 問題のあるライブラリを入れ直す
まずは、proto-plusってライブラリのバージョンを調整します。
pip install proto-plus==1.24.0.dev1
でも、これだけだと次にまた別の依存関係で怒られることがあります。なので、protobufというライブラリもインストールし直しましょう。
pip install protobuf==5.26.1
- SDKを再アップデート!
ここまでできたら、もう一度Google Cloud SDKをアップデートします。
gcloud components update
ちゃんとアップデートできれば、エラー解決です!👍
エラーの原因を避けるためのヒント
Google Cloud SDKやPythonのライブラリたちは、たまに「お前古すぎ!」みたいに言い合うので、重要なプロジェクトをやる前にはライブラリのバージョン確認をすると安心です。
まとめ
Google Cloud SDKで「MessageMapContainerがない!」と言われても慌てないで、ライブラリを入れ直せばOK!って感じです。