😸

WSL2にGoogle Cloud SDKをインストールしようとしたらハマったのでメモ

2022/09/24に公開

現在使ってるバージョンはこんな感じです。

$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

https://cloud.google.com/sdk/docs/install

日本語のページには記載はないのですが、英語版ですと、The Google Cloud CLI requires Python 3 (3.5 to 3.8, 3.7 recommended)との記載があります。

Supported Python versions
The Google Cloud CLI requires Python 3 (3.5 to 3.8, 3.7 recommended). For information on how to choose and configure your Python interpreter, see gcloud topic startup

しかし、WSL2のUbuntu 22.04.1 では、python3のバージョンが

$ python3 --version
Python 3.10.4

もしかしたら自分が何かapt以外の方法で入れたかもなんで確認

$ apt show python3
Package: python3
Version: 3.10.4-0ubuntu2
Priority: important
Section: python
Source: python3-defaults
Origin: Ubuntu
(snip)

そんなことなかった。

手順通りインストールしても

$ gcloud version
ERROR: gcloud failed to load: module 'collections' has no attribute 'Mapping'
    gcloud_main = _import_gcloud_main()
    import googlecloudsdk.gcloud_main
    from googlecloudsdk.calliope import cli
    from googlecloudsdk.calliope import actions
    from googlecloudsdk.calliope import markdown
    from googlecloudsdk.calliope import usage_text
    from googlecloudsdk.calliope import parser_arguments
    from googlecloudsdk.calliope import parser_completer
    from googlecloudsdk.core.console import progress_tracker
    class _BaseStagedProgressTracker(collections.Mapping):

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:
    /usr/bin/python3

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/

ようなエラーが出てしまい使えません。

pyenv[1]などを使って別途pythonをインストール[2]します。

ざっと手順のみ記載しておきます。

$ curl https://pyenv.run | bash

以下を $HONE/.bashrcに記載

export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

シェルを再起動してもいいですが、面倒なんで上記3行を実行。

$ pyenv version
system (set by /home/noriko/.pyenv/version)

3.7がオススメっぽいので、3.7の最新を

$ pyenv install 3.7.14
(snip)
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
WARNING: The Python curses extension was not compiled. Missing the ncurses lib?
WARNING: The Python ctypes extension was not compiled. Missing the libffi lib?
WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?
(snip)
$ sudo apt-get install libbz2-dev libncurses-dev libffi-dev libreadline-dev libssl-dev 

入れます。

で、もう一度インストール。pyenv install 3.7.14。少しWARNINGが出ましたが、一旦放置して、バージョンをセット。

$ pyenv global 3.7.14
$ pyenv global
3.7.14

gcloudコマンドのバージョン確認。

$ gcloud version
Google Cloud SDK 402.0.0
alpha 2022.09.12
beta 2022.09.12
bq 2.0.75
bundled-python3-unix 3.9.12
core 2022.09.12
gcloud-crc32c 1.0.0
gsutil 5.13

OK。

いやまだpythonバージョン問題あると思ってなかった…

脚注
  1. https://github.com/pyenv/pyenv ↩︎

  2. https://github.com/pyenv/pyenv-installer ↩︎

Discussion