【GAE/Go】 'ImportError: cannot import name goroots' の対処

こんにちは。

GAE/Go開発している最中にふとappengine sdkのアップデートをしました。

$ gcloud components update

 これでappengine sdk含め諸々のアップデートがなされたわけですが、この直後から goapp コマンドでエラーが出るようになりました。

➜  goapp
Traceback (most recent call last):
  File "/Users/shimbaroid/google-cloud-sdk/platform/google_appengine/goapp", line 13, in <module>
    from google.appengine.tools import goroots
ImportError: cannot import name goroots

gorootsなるパッケージのimportに失敗しているようです。

このスクリプト(goapp)、pythonで書かれているので「pythonのパッケージいれればいいのかな」なんて思いましたが面倒くさそうなので避けました。pythonやったことないワカンナイ。

今回インストールされたappengineのバージョンは1.9.53でした。アップデート前のバージョンはわからないです…

➜  goapp version
go version 1.6.3 (appengine-1.9.53) darwin/amd64

対処

件のgorootsは$GOROOTを取得するためのもののようですが、別のマシンに入っている古いバージョンのgoappを確認したところ、gorootsを使わずに$GOROOTを取得していました。

これに倣って手元のマシンのgoappを書き換えてしまいます。

- from google.appengine.tools import goroots

SDK_BASE = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))
- GOROOT = os.path.join(SDK_BASE, goroots.GOROOTS['go1'])
+ GOROOT = os.path.join(SDK_BASE, 'goroot')

古いマシンのappengineのバージョンは1.9.50でした。

以上です

google cloud sdkのインストールのときもinstall.sh書き直してたな…