Edited at

Google Cloud SDKのセットアップはどこまでWindowsユーザーを苦しめれば気が済むのか?

More than 1 year has passed since last update.


モチベーション


  • GoogleAppEngine/Goのapi_version:1がdeprecateされる

  • コードベースをgo1.6からgo1.8にしたい

  • ローカルのSDKバージョンではapi_version:1.8を使えない

  • つまり、あげざるをえない(;´Д`)


アップデート前

>gcloud version

Google Cloud SDK 191.0.0
app-engine-go
app-engine-python 1.9.67
beta 2017.09.15
bq 2.0.29
core 2018.02.23
gcloud
gsutil 4.28


アップデート後

Google Cloud SDK 213.0.0

app-engine-go
app-engine-python 1.9.74
beta 2018.07.16
bq 2.0.34
cloud-datastore-emulator 2.0.1
core 2018.08.17
gcloud
gsutil 4.33

gcloud components update コマンドでアップデートOKだぜb」的なメッセージを信じてEnterしたけれど、後述のエラーダンプを食らって消沈しました..。


SDK のinstallでつまる


環境


  • Windows 10 Pro, 64bit Version 1803 ビルド 17134


発生した問題


UnicodeDecodeErrorってPythonのエラーなんですね。ぼくがやりたいのはSDKのインストールであってPythonのデバッグではないんですね

UnicodeDecodeError: 'ascii' codec can't decode byte ....


サクッとネットで解決策がのっていて、 エンコーディングをutf-8にすればOK とのことらしい。先達の叡智!ひゃっほ~!

UnicodeDecodeError: 'utf8' codec can't decode byte ....

ほほう・・・?


SDKインストール手順

※前準備 - PCにインストールされていたPython2.7をアンインストールしました


  • SDKのセットアップを実行しbundledpythonをインストールする


    • セットアップは失敗します



  • PowerShellを使って、bundledpythonを使用させるための環境変数を設定する

  • システム環境変数のGUIから追加したほうが確実

CLOUDSDK_PYTHON="E:\gcloud\google-cloud-sdk\platform\bundledpython\python.exe"

// E:\gcloud\はセットアップ時に指定したフォルダーです


【重要】Pythonの初期エンコーディングをasciiからshift-jisに変更する


sitecustomize.py

import sys

sys.setdefaultencoding('shift-jis')


インストールを実行



  • E:\gcloud\google-cloud-sdk\install.bat をシェルから実行すると、エラーなく進み、プロンプトの問い合わせを[Y]します。

  • gcloud CLI 実行時にもエンコーディング設定を反映させるため、環境変数を指定

    CLOUDSDK_PYTHON_SITEPACKAGES="E:\gcloud\google-cloud-sdk\platform\bundledpython\Lib\site-packages"



補足)gcloud CLIで使用される環境変数


gcloud.cmdより

# "E:\gcloud\google-cloud-sdk\bin\gcloud.cmd"

rem <cloud-sdk-cmd-preamble>
rem
rem CLOUDSDK_ROOT_DIR (a) installation root dir
rem CLOUDSDK_PYTHON (u) python interpreter path
rem CLOUDSDK_PYTHON_ARGS (u) python interpreter arguments
rem CLOUDSDK_PYTHON_SITEPACKAGES (u) use python site packages


完了!


勘所まとめ


  1. SDKセットアップをそのまま実行すると PythonのUnicodeDecodeError が出る

  2. SDKバンドルのPython2.7を正しく使わせるため、以下が必要



    1. site-packagesに初期エンコーディングをshift-jisに設定するスクリプトを配置する


    2. CLOUDSDK_PYTHON でPythonの実行パスを指定する


    3. CLOUDSDK_PYTHON_SITEPACKAGESsite-packagesのパスを指定する



  3. もう一度セットアップする

  4. CLIにパスを通す(E:\gcloud\google-cloud-sdk\bin

以上の手順により、GoogleCloudSDKのアップデートが無事に完了しました!ε-(´∀`*)ホッ

で、なにをするのが目的だったのか。。。。