GWTっぽく python->jsにコンパイルするpyjamasを使ってみる
Pythonで書いたものをjsでAjaxな何かに変換してくれるライブラリ。
pyjamas-0.7.tgz - pyjamas - Pyjamas 0.7 Release - Project Hosting on Google Codeからダウンロード
インストール
インストール手順は日本語でググッても見つからなかったのでmakefile読んだ
choose one of the following: make local-build make system-install
とのこと。自分は system-install するので
$ cd pyjamas_0.7
$ sudo make system-isntall
$ sudo python bootstrap.py
これでimportできるようになりました
bootstrap.pyはbulid.shを走らすのに必要です
Hello, Pyjamas!
とりあえずサンプルコードをjsに変換してみる
ディレクトリ名とか適時読み替えてください
$ cd examples/helloworld/ $ ./build.sh Building: Hello PYJSPATH: ['/Users/mizchi/lib/pyjamas/examples/helloworld', '/Users/mizchi/lib/pyjamas/library', '/Users/mizchi/lib/pyjamas/addons'] Built to : /Users/mizchi/lib/pyjamas/examples/helloworld/output
output以下にjsにコンパイルされたものが作られる。Hello.htmlを開く。
動いている。
中身
で、肝心のHello.pyがどうなっているかというと
import pyjd # this is dummy in pyjs. from pyjamas.ui.RootPanel import RootPanel from pyjamas.ui.Button import Button from pyjamas.ui.HTML import HTML from pyjamas.ui.Label import Label from pyjamas import Window import pygwt def greet(fred): fred.setText("No, really click me!") Window.alert("Hello, AJAX!") if __name__ == '__main__': pyjd.setup("public/Hello.html?fred=foo#me") b = Button("Click me", greet, StyleName='teststyle') h = HTML("<b>Hello World</b> (html)", StyleName='teststyle') l = Label("Hello World (label)", StyleName='teststyle') base = HTML("Hello from %s" % pygwt.getModuleBaseURL(), StyleName='teststyle') RootPanel().add(b) RootPanel().add(h) RootPanel().add(l) RootPanel().add(base) pyjd.run()
サンプル読みながら動かしていくしかなさそう。サンプルは充実している。
Pyjamas Examples
結局
Pyjamasは学習コストの点から考えるとどうなのだろう。小さなパーツを組み立てたり、簡単なゲームを作るのに向いてる気がする。
自分はjsが書けないわけじゃないし、クライアント側は十二分にリッチなExtJS + jQueryでいいような気もしてきた。
Pyjamas Desktopというものもあるそうだが、この手のものだと、自分はよくTitanium DesktopでサクっとGUIを作ってしまうので、不要な気がする
Use Appcelerator Titanium to build mobile apps for iPhone & Android and desktop apps for Windows, Mac OS X & Linux from Web technologies
Titanium Desktopはデスクトップアプリ限定だけどコンパイルする必要がなく直接pythonが走るし、そのままjsも叩ける。ただサポートを有料化してから開発コミュニティの雰囲気がよくない。