14
8

More than 5 years have passed since last update.

pyenv 環境で Google Cloud SDK をインストールする

Posted at

Google Cloud SDK は Python2 系しか対応しておらず、しかもだいぶ古いまま放置されているようで、pyenv (+virtualenv) 環境下でインストールを試みると色んな所がぶっ壊れる。

やりたいこと

pyenv virtualenv 2.7.12 gcloudsdk で作成した Python2 の環境の下に Google Cloud SDK をインストールしたい。システム環境を汚染してほしくない。

問題点

StackOverflow の質問 によると、

$ export CLOUDSDK_PYTHON=$(which python2)
$ ./install.sh

とすれば動くらしいが、勿論 pyenv 環境だとうまくいかない。
$(which python2) を、作成した環境に合わせて /Users/keisuke.nakata/.pyenv/versions/gcloudsdk/bin/python2 などとして直接 pyenv の Python 実行環境を読みに行かせてもダメ。
(ImportError: No module named platform で怒られる。Python のライブラリをうまく読みにいけていないっぽい)

解決への道のり

そこで、zsh + virtualenv環境でGoogle Cloud SDKをインストール - dackdive's blog を参考に、直接 Python の実行環境を指定してインストールスクリプト類を叩きに行くことにする。
以下では、公式からダウンロードして解凍した google-cloud-sdk/ を、仮に /Users/keisuke.nakata/bin/google-cloud-sdk/ に置いたものとして話をすすめる。

まず、Google Cloud SDK を実行したい Python 実行環境のパスを設定する:

export CLOUDSDK_PYTHON=/Users/keisuke.nakata/.pyenv/versions/gcloudsdk/bin/python2

上記は ~/.bash_profile あたりにでも書いておけばよい。

そして、 install.sh を叩きたい。こいつを叩こうとするとハマったので、内部で実行しているスクリプトを直接叩きに行く:

$CLOUDSDK_PYTHON /Users/keisuke.nakata/bin/google-cloud-sdk/bin/bootstrapping/install.py

エラーが出ずに、色々聞かれ始めれば OK (統計情報送っていい?とか、デフォルトアカウントは?とか、そういうやつ)
終わったら、一旦シェルを再起動。

次に、 gcloud init 的なものを実行したい。しかし、ここでもまたハマるので、こいつも直接叩きに行く:

$CLOUDSDK_PYTHON /Users/keisuke.nakata/bin/google-cloud-sdk/lib/gcloud.py init

ブラウザが立ち上がって認証を求められるはず。

ここまでくれば、後は gcloud コマンドにエイリアスをかければよい。~/.bash_profile あたりに、

alias gcloud="$CLOUDSDK_PYTHON /Users/keisuke.nakata/bin/google-cloud-sdk/lib/gcloud.py"
alias dev_appserver="$CLOUDSDK_PYTHON /Users/keisuke.nakata/bin/google-cloud-sdk/bin/dev_appserver.py"

を追記 (して source)。もしも dev_appserver 以外のコマンドも実行したい場合は、同じようにエイリアスを張ればOKだと思う。

ローカルに AppEngine の開発サーバを立ち上げてみる

(もともとこれをやりたいために Google Cloud SDK が欲しかった)

git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
cd python-docs-samples/appengine/standard/flask/hello_world
pip install -t lib -r requirements.txt  # flask は AppEngine に含まれていないので、lib/ 以下に配置しておく必要がある
dev_appserver $PWD

で、

INFO     2017-11-06 12:53:51,688 devappserver2.py:116] Skipping SDK update check.
INFO     2017-11-06 12:53:51,841 api_server.py:313] Starting API server at: http://localhost:62371
INFO     2017-11-06 12:53:51,844 dispatcher.py:226] Starting module "default" running at: http://localhost:8080
INFO     2017-11-06 12:53:51,849 admin_server.py:116] Starting admin server at: http://localhost:8000

みたいなログが表示されたらブラウザで localhost:8000 に飛べばローカルで AppEngine の開発サーバが立ち上がっている。

image.png

なんか色々古いが、たぶん問題なく動いている。

image.png

副作用

補完が効かない。

参考資料

14
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
8