emahiro/b.log

日々の勉強の記録とか育児の記録とか。

python のバージョン起因で gcloud コマンドの実行に失敗する

Overview

タイトルの通りです。

gcloud components update したら python のバージョン違いで gcloud コマンドが動かなくなったのでその解決方法について記載します。

エラーの内容

Traceback (most recent call last):
  File "/Users/$UserName/google-cloud-sdk/lib/gcloud.py", line 104, in <module>
    main()
  File "/Users/$UserName/google-cloud-sdk/lib/gcloud.py", line 62, in main
    from googlecloudsdk.core.util import encoding
  File "/Users/$UserName/google-cloud-sdk/lib/googlecloudsdk/__init__.py", line 23, in <module>
    from googlecloudsdk.core.util import importing
  File "/Users/$UserName/google-cloud-sdk/lib/googlecloudsdk/core/util/importing.py", line 23, in <module>
    import imp
  File "/usr/local/Cellar/python@3.9/3.9.0_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/imp.py", line 23, in <module>
    from importlib import util
  File "/usr/local/Cellar/python@3.9/3.9.0_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/importlib/util.py", line 2, in <module>
    from . import abc
  File "/usr/local/Cellar/python@3.9/3.9.0_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/importlib/abc.py", line 17, in <module>
    from typing import Protocol, runtime_checkable
  File "/usr/local/Cellar/python@3.9/3.9.0_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/typing.py", line 26, in <module>
    import re as stdlib_re  # Avoid confusion with the re we export.
  File "/usr/local/Cellar/python@3.9/3.9.0_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/re.py", line 124, in <module>
    import enum
  File "/Users/$UserName/google-cloud-sdk/lib/third_party/enum/__init__.py", line 26, in <module>
    spec = importlib.util.find_spec('enum')
AttributeError: module 'importlib' has no attribute 'util'

要は python 3.9 には Google Cloud SDK は対応してねーよってことらしいです。

stackoverflow.com

対応

どうやら brew を使って python をインストールしていると意図せず裏側で最新の python が最新にあってしまっていたようで( brew upgrade した時とかの弊害) gcloud コマンドから参照する python のバージョンが最新にあってしまっていました。

これを解決するためにたまたま pyenv を入れていたいので pyenv 経由で 3.8 をインストールして合わせました。

pyenv install 3.8.0
pyenv global 3.8.0
source .zshrc
python --version
Python 3.8.0

これで再度 gcloud コマンドを実行したら正常に動作しました。