モチベーション
- 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
を作成し、site-packagesフォルダー
に配置- 筆者の環境では
E:\gcloud\google-cloud-sdk\platform\bundledpython\Lib\site-packages
でした
- 筆者の環境では
- 参考:
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
完了!
勘所まとめ
- SDKセットアップをそのまま実行すると Pythonの
UnicodeDecodeError
が出る - SDKバンドルのPython2.7を正しく使わせるため、以下が必要
-
site-packages
に初期エンコーディングをshift-jis
に設定するスクリプトを配置する -
CLOUDSDK_PYTHON
でPythonの実行パスを指定する -
CLOUDSDK_PYTHON_SITEPACKAGES
でsite-packages
のパスを指定する
-
- もう一度セットアップする
- CLIにパスを通す(
E:\gcloud\google-cloud-sdk\bin
)
以上の手順により、GoogleCloudSDKのアップデートが無事に完了しました!ε-(´∀`*)ホッ
で、なにをするのが目的だったのか。。。。