Pylons体験記

PylonsというのはPythonの新しいウェブフレームワークです。

はじめに

今いる会社はかなりPython人気が高くて、社員に占めるPythonistaの割合で考えたらもしかするとGoogle以上かも、というぐらい皆がPythonを使っていたりします(まあ小さい会社なので社員自体が少ないんですが)。それで、今度の仕事でPylonsを使うという話があったので試しに何か作ってみようかと思い、最初は動かないと面白くないので、id:perezvonさんの一連の記事を参考、というかそのまま丸写しさせてもらって感じを掴むところから始めました。

環境構築

その前にPythonの環境構築をします。PythonにもPerlCPANモジュールと同じようにネットワークからパッケージを自動的にインストールしてくれるeasy_installという仕組みがあります。そこで、以下のサイトなどを参考にroot権限なしでeasy_installできるようにします。

具体的には以下の手順です。

  • 1. ~/.pydistutils.cfgを作成
[install]
install_lib = /usr/local/python/lib/python
install_scripts = /usr/local/python/bin
$ export PYTHONPATH=/usr/local/python/lib/python
$ export PATH=/usr/local/python/bin:$PATH
  • 3./usr/local/pythonを作成、root以外でも書き込めるように権限を設定する(この手順のみrootで作業)
  • 4./usr/local/python/{bin,lib}を作成

そしてeasy_installを実行。

$ easy_install Pylons
$ easy_install SQLAlchemy
$ easy_install PasteScript

次にpasterコマンドでプロジェクトの雛型になるファイルを作成します。

$ paster create --template=pylons BlogTutorial

が、ここで結構ハマリました。まずsetuptoolsのバージョンが低すぎると言われたのでeasy_installでsetuptoolsを入れようとしたんですがうまくバージョンアップしてくれず、以下のようにバージョン指定する必要がありました。

$ easy_install "setuptools>=0.6c5"

それでもバージョンが低いというエラーが出るので、RPMで入れていたsetuptoolsをアンインストールしたらエラーは出なくなりました。さらに何度かpaster createを実行してその度に「○○パッケージが不足している」というエラーが出てはeasy_installでインストールを繰り返して、結局paster createが実行できるようになるまでに以下のパッケージをインストールしました(この辺は自動で入ってくれることを期待していたんですがよく分からないところです)。

 $ easy_install "nose>=0.9.2"
 $ easy_install "setuptools>=0.6c5"
 $ easy_install "decorator>=2.0.1"
 $ easy_install "simplejson>=1.7.1"
 $ easy_install "FormEncode>=0.7"
 $ easy_install "Myghty>=1.1"
 $ easy_install "Beaker>=0.6.3"
 $ easy_install "WebHelpers>=0.3"

paster createを実行するとカレントディレクトリにBlogTutorialというディレクトリができているので、そこに移動してサーバを起動してみます。

 $ cd BlogTutorial
 $ paster serve --reload development.ini

まだ1行もコードを書いていませんが、ブラウザでhttp://localhost:5000/にアクセスするとWelcomeページが表示されました。

ここから先はチュートリアルに従って進めるだけなので割愛しますが、開発を進めるとすぐに以下のパッケージが必要になるのであらかじめインストールしておくといいかもしれません。

 $ easy_install pysqlite
 $ easy_install Authkit

雑感

様々なパッケージを組み合わせて作るところや、コード自動生成機能、開発用のWebサーバ機能を提供していることなど、同じウェブフレームワークであるPerlCatalystと雰囲気が似ていますが、実際にコードを書いていくと違うところもあって、特にURLとコントローラのマッピング部分は独特でした。ただし大枠ではMVCに則っているので、他のウェブフレームワークを触ったことのある人ならそれほど違和感なく使えると思います(Ruby on Railsは触ったことがないので比較できないのですが、詳しい人に訊くと「PylonsRoRと似ている。Catalystにはあんまり似てない」とのことでした)。

そのMVCのVの部分で、テンプレートエンジンは標準のMyghtyよりMakoGenshiの方が良いらしいです。それで一度Myghtyで作った後、Myghty→Mako→Genshiと順番にテンプレートエンジンを変更してみたところ、Makoは動いたんですがGenshiは「リソースが見つからない」というようなエラーが出てまだ動かせていません(たぶんテンプレートの場所がうまく指定できていない)。

実は一ヶ所だけ悩んだところがあって、Blogを作る(2)データベースの設定で「モデルクラスは、blogtutorial/modelsモジュールに定義します。」と簡単に書かれているのですが、Pythonの知識が乏しいのでこの定義をどのファイルに書けばいいのかが分かりませんでした。最初blogtutorial/models.pyというファイルを作ったらモジュールがロードできなくて、代わりにblogtutorial/models/post.pyとか適当にファイルを作ってみたらimport文を修正する必要があるもののとりあえず動きました。その後blogtutorial/models/__init__.pyに書くようにしたらimport文を修正せずに動いたんですが、これで正しいのかイマイチ自信がありません。そもそもPythonのモジュールというのがどういうものなのか、その辺から理解する必要がありそうです。

ところで、easy_installとかpasterとか一般的すぎる名前を付ける事に対してPythonの人達は気にならないんでしょうか。ネーミングセンスが欠如しているのかそれとも唯我独尊なのか…。