いきなりPython 〜Hello! world編〜
何故にカエルの天敵であるヘビ(Python)をやらねば(?)いけなくなったのか。
とあるきっかけで、”Google App Engine上で動作する Twitterのbotを開発してみるイベント”
(通称BOT2UKU)のお誘いを受けて、ぜひ勉強会に参加してみたい!と思ってはみたものの、
そこでは、Pythonベースでの勉強だったという...。
Rubyも全くできないのに、Pythonとか無謀すぎる...とは思いつつ、
まぁ、それでも、言語は違えども、勉強にはなるかなぁと思って、とりあえずbot2kuを受講する際に必要な環境設定をして、
勉強会の資料をもとに、自分でちょっとやってみよう。なんて軽い気持ちでやったのが始まり。
とりあえず、BOT2UKUの"GAEでTwitterのbotを作る のまとめページ"を参照しながら設定しよう。
ど初心者でもわかる設定のしかた(Python版)
1 pythonをインストールする 私のPC環境: Windows Vista / Intel Core 2 Duo CPU / 32ビットオペレーションシステム インストールするPython version:python-2.5.4.msi 2 pythonを便利に使うための設定をする 3 GAEのアカウント設定して使えるようにする。 4 GAEのSDK(開発用キット)のインストール
4番まで設定完了。さて、実際にGAEを動かしてみようかなと。
まずは、Hello, World!チュートリアルに従って、
helloworldという名前のディレクトリ(=フォルダ)を作成。
helloworld ディレクトリで、helloworld.py という名前のファイルを作成し、次のようなコンテンツを入れる。
print 'Content-Type: text/plain' print '' print 'Hello, world!'
次に、helloworld ディレクトリで、app.yaml という名前のファイルを作成し、次のようなコンテンツを入れる。
application: helloworld version: 1 runtime: python api_version: 1 handlers: - url: /.* script: helloworld.py
よし、ファイル作成完了。
次はアプリケーションのテスト。
ハンドラ スクリプトと設定ファイルを使用して、各 URL にハンドラをマッピングすれば、
アプリケーションは完成です。App Engine SDK に含まれる Web サーバーでこれをテストすることができます。
ハンドラ??マッピング??それって何だ??
ぐぐってみたけどよくわからない...orz
と、とりあえず、コマンド入力してみよう。
次のコマンドで helloworld ディレクトリまでのパスを指定し、Web サーバーを起動します。
google_appengine/dev_appserver.py helloworld/
....?
エラーでるぞ。
うーん、やっぱり「URLにハンドラをマッピング」ってのをしないとだめなのかなぁ(´・ω・`)
ああ、でも、Rubyの時って、rubyて入力してからでないと、rbファイル実行できないよな。
ってことは、これって、pythonって入力してしないとだめなんじゃね?
と思って、あれこれやったけど、syntax errorとかでてしまった。
も一度、整理しよう。
現在の作業環境
Python C:\Python25 GAE C:\Program Files\Google\google_appengine\dev_appserver.py helloworld C:\Program Files\Google\google_appengine\helloworld\helloworld.py C:\Program Files\Google\google_appengine\helloworld\app.yaml
しかし、各urlに ハンドラをマッピングの意味がわからないまま(´・ω・`)ショボーン
テストその1
C:\Program Files\Google\google_appengine\dev_appserver.py helloworld/
を入力すると、EmEditorでdev_appserver.pyが開く(´・ω・`)
テストその2
インタプリタにpythonと入力して実行してみる。
C:\Program Files\Google\google_appengine>python dev_appserver.py helloworld/
結果
C:\Program Files\Google\google_appengine>python dev_appserver.py helloworld/ Traceback (most recent call last): File "dev_appserver.py", line 60, in <module> run_file(__file__, globals()) File "dev_appserver.py", line 57, in run_file execfile(script_path, globals_) IOError: [Errno 2] No such file or directory: 'C:\\Program Files\\Google\\google _appengine\\google\\appengine\\tools\\dev_appserver_helloworld.py'
なんかPATH通ってなくない?\\とかになってる...。
ちなみに、line57、line60はこんな感じになってた。
def run_file(file_path, globals_, script_dir=SCRIPT_DIR): """Execute the file at the specified path with the passed-in globals.""" sys.path = EXTRA_PATHS + sys.path script_name = os.path.basename(file_path) script_name = SCRIPT_EXCEPTIONS.get(script_name, script_name) script_path = os.path.join(script_dir, script_name) execfile(script_path, globals_) ←line 57 if __name__ == '__main__': run_file(__file__, globals()) ←line 60
とりあえず、も一度ユーザー環境設定見直そう。
PATH>>C:\Program Files\Ruby-1.8\bin;C:\work;C:\Python25;C:\Python25\Scripts;C:\Python25\Lib\site-packages;C:\Program Files\Google\google_appengine\;C:\helloworld
う〜ん。これがあっているかどうかもよくわからなくなってきた。
なんか設定いじってしまってるのかもしれないと思い、GoogleAppEngine_1.2.0をREPAIRした。
で、今度は、最後のhelloworldの前まで入力してみた。
C:\Program Files\Google\google_appengine>python dev_appserver.py Invalid arguments Runs a development application server for an application. dev_appserver.py [options]Application root must be the path to the application to run in this server. Must contain a valid app.yaml or app.yml file.
お?Invalid argumentsってでた。
ってことは、引数がないって事??
dev_appserver.py [options]
この [options] ってところに値「helloworld」を入れろって事かな?
よし、今度こそ!
C:\Program Files\Google\google_appengine>python dev_appserver.py helloworld INFO 2009-10-05 11:29:29,216 appengine_rpc.py] Server: appengine.google.com Allow dev_appserver to check for updates on startup? (Y/n):
おおおお?!うまくいきそう??とりあえず、「Y」入力
Allow dev_appserver to check for updates on startup? (Y/n): y dev_appserver will check for updates on startup. To change this setting, edit C :\Users\sachiko/.appcfg_nag INFO 2009-10-05 11:29:46,438 appcfg.py] Checking for updates to the SDK. WARNING 2009-10-05 11:29:46,967 datastore_file_stub.py] Could not read datastor e data from c:\users\sachiko\appdata\local\temp\dev_appserver.datastore WARNING 2009-10-05 11:29:46,967 datastore_file_stub.py] Could not read datastor e data from c:\users\sachiko\appdata\local\temp\dev_appserver.datastore.history WARNING 2009-10-05 11:29:47,049 dev_appserver.py] Could not initialize images A PI; you are likely missing the Python "PIL" module. ImportError: No module named _imaging INFO 2009-10-05 11:29:47,398 dev_appserver_main.py] Running application hell oworld on port 8080: http://localhost:8080
なんかエラーでまくってるけど大丈夫だろうか...
とりあえず、ブラウザにhttp://localhost:8080を入力してみよう。
....orz
やっぱりだめだった(´;ω;`)
にゅ〜ん、わからんよぉう。
そして、ふたたび、ぐぐる→ぐぐる→ぐぐる→ぐぐr(ry
と、無限loopしかけたところに、ヒントを発見!!!!!
それはここだーーーーーーーーー!ヽ(≧▽≦)ノ
GAE+Vista Ulitmateでのdev_appserver.pyの起動
調べてみたら、まさにこれと全く同じ!!
C:\Windows\System32\drivers\etc\hostsをエディタで開いたら、
::1 localhostとなっている!!!><
というわけで
「::1 localhost」になってるところを、「127.0.0.1 localhost」に編集しなおす。
で、再度 http://localhost:8080にアクセス。