Google App Engine(GAE)はStandard environment
とFlexible environment
の2あるんですけど、無料枠が適用されるのはStandard environment
だったので今回はStandard environment
を使ってみることにしました。
お恥ずかしいことにGAEは初挑戦です。
まずGAEのPythonは2.7でバージョンが固定され依存ライブラリもバージョンが固定されています。
組み込みサードパーティ ライブラリ
なのでStandard environment
ではPython3系は使えないので要注意です。
あとGoogle Cloud SDKもインストール必須だと思います。
dev_appserver.pyを動かすまで
Google Cloud SDKとGAE用のPythonツールをインストールすると確かdev_appserver.py
が使えるようになります。
おそらくローカルでGAEの環境を再現するものだと思います。
Hello Worldを表示するだけWebアプリケーションをFlaskで作ったのですがこれがWindows10で動かない・・・。
最終的にHello Wolrdは表示できました。
Pythonの準備
Python2.7でdev_appserver.py
を起動するとImportError: No module named _ctypes
みたいなエラーが表示されました。
自分はAnacondaを使っているのでconda
で準備します。
[code lang=bash]
conda create -n gae anaconda numpy=1.6 python=2.7
activate gae
[/code]
このnumpy=1.6が大事で詳しくはこちらをご参照ください。
clickのバージョン
上のバージョンを使ってdev_appserver.py
を実行してもImportError: No module named _ctypes
のエラーが表示されました。
どういう経緯で見つけたのかはわかりませんがこちらのページと同様にClick
のバージョンを上げました。
[code lang=bash]
pip install --target lib --upgrade click==5.1
[/code]
appengine_config.py
上記の状態でNo module named _ctypes
は消えたのですが、次に違うエラーが表示されます。
ImportError: No module named msvcrt
というエラーです。
これはこちらのページと同様にワークアラウンドで回避しました。
appengine_config.py
を修正します。
[python]
import os
import sys
from google.appengine.ext import vendor
vendor.add('lib')
if os.environ.get('SERVER_SOFTWARE', '').startswith('Google App Engine'):
sys.path.insert(0, 'lib.zip')
else:
if os.name == 'nt':
os.name = None
sys.platform = ''
[/python]
これでようやくHello Worldが表示されるようになりました。
まとめ
Hello Worldを表示させるのに久々に苦労しました。
10年以上前にApacheとTomcatを連携させているときのような感覚に陥りました・・・。
Hello Worldを表示させたときの達成感が大きかった。