Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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

副作用

補完が効かない。

参考資料

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away