🦔
gcloudコマンドが使えなくなっていた
きっかけ
ある日、GCP環境にアクセスする必要がありgcloudコマンドを叩いたところ、エラーが出てしまい、全くコマンドが実行できなくなっていることに気づきました。
ちなみに環境はmac os 10.15.7でpyenvにてpythonはpython 3.7.4、python2は2.7.16としている環境です。
>>> gcloud -h
ERROR:root:code for hash md5 was not found.
Traceback (most recent call last):
File "/Users/takeshimiyajima/.pyenv/versions/2.7.16/lib/python2.7/hashlib.py", line 147, in <module>
globals()[__func_name] = __get_hash(__func_name)
File "/Users/takeshimiyajima/.pyenv/versions/2.7.16/lib/python2.7/hashlib.py", line 97, in __get_builtin_constructor
raise ValueError('unsupported hash type ' + name)
ValueError: unsupported hash type md5
ERROR:root:code for hash sha1 was not found.
Traceback (most recent call last):
File "/Users/takeshimiyajima/.pyenv/versions/2.7.16/lib/python2.7/hashlib.py",
〜中略〜
Traceback (most recent call last):
File "/Users/takeshimiyajima/.pyenv/versions/2.7.16/lib/python2.7/hashlib.py", line 147, in <module>
globals()[__func_name] = __get_hash(__func_name)
File "/Users/takeshimiyajima/.pyenv/versions/2.7.16/lib/python2.7/hashlib.py", line 97, in __get_builtin_constructor
raise ValueError('unsupported hash type ' + name)
ValueError: unsupported hash type sha384
ERROR:root:code for hash sha512 was not found.
Traceback (most recent call last):
File "/Users/takeshimiyajima/.pyenv/versions/2.7.16/lib/python2.7/hashlib.py", line 147, in <module>
globals()[__func_name] = __get_hash(__func_name)
File "/Users/takeshimiyajima/.pyenv/versions/2.7.16/lib/python2.7/hashlib.py", line 97, in __get_builtin_constructor
raise ValueError('unsupported hash type ' + name)
ValueError: unsupported hash type sha512
ERROR: gcloud failed to load: 'module' object has no attribute 'sha256'
gcloud_main = _import_gcloud_main()
import googlecloudsdk.gcloud_main
from googlecloudsdk.api_lib.iamcredentials import util as iamcred_util
from googlecloudsdk.api_lib.util import apis_internal
from googlecloudsdk.core import properties
from googlecloudsdk.core import config
from googlecloudsdk.core.util import files as file_utils
class Checksum(object):
def __init__(self, algorithm=hashlib.sha256):
This usually indicates corruption in your gcloud installation or problems with your Python interpreter.
Please verify that the following is the path to a working Python 2.7 or 3.5+ executable:
/Users/takeshimiyajima/.pyenv/versions/2.7.16/bin/python2
If it is not, please set the CLOUDSDK_PYTHON environment variable to point to a working Python 2.7 or 3.5+ executable.
If you are still experiencing problems, please reinstall the Cloud SDK using the instructions here:
https://cloud.google.com/sdk/
試行錯誤
まずはエラーメッセージどおり、CLOUDSDK_PYTHONを設定してみましたが、全くダメでした。
次にエラーメッセージでググるとmacを使っている人たちがこのエラーに遭遇しているようでした。
解決方法は人によって様々で、一番よく見かけたのはpython2.7の再インストールでした。
pyendにて再インストールしてみても自分の環境では同じエラーが出て続けて進展はありませんでした。
悩ましい・・・
解決した手順
次によく見かけたのはopenssl@1.0.2のライブラリをPATHを適切に設定する方法でしたが、自分の環境にはそもそもopenssl@1.1しか入っていませんでした。
そこでopenssl@1.0.2をなんとかインストールできないかとたどり着いた方法が以下のやり方でした。
wget https://github.com/tebelorg/Tump/releases/download/v1.0.0/openssl.rb
brew install openssl.rb
これで無事、エラーはなくなりました。良かった。
良かったけど、これ調べるだけで1時間ぐらいかかった・・・
参考
Discussion