2011-07-09

Stay alert, trust no "Py3k ready", keep your pdb handy

Python mini Hack-a-thonに行ってきた。
Python3で何か動かすところまでやろうとして挫折したメモ。

ベースの環境はMacPortsのpython32, py32-distribute, py32-virtualenvを使った:
  • python32 @3.2_2+no_tkinter+universal
  • py32-distribute @0.6.19_0+universal
  • py32-virtualenv @1.6.1_0+universal

1. VirtualEnvは大丈夫
virtulenvは動く。というよりも、これが動かないと話にならん。

2. pipコマンドが動くと思うな
たいていは動くんだけど、時折入れられないパッケージがある。
バージョン比較とかをするところでintとstrを比べようとして落ちるケースが非常に多い。
次に多いのはsetup.pyにprint文が入っているケース。
PyPIのインデックスはバージョンごとに分かれている方がいいんじゃないかなあ、と思ったりするわけです。

3. buildoutだめ
http://pypi.python.org/pypi/zc.buildout/2.0.0a1を見るとbootstrap.pyを拾ってきて使えとあるけど、pipと同じようにバージョン比較だの何だのでよく落ちる。
2.0.0a1を使っているはずなのに、途中で1.5.2のeggがインストールされていたりとかrecipeがPython3で動かないとかが当たり前のように起きるので、今のところ全く使えないと思った方がよい。

4. フレームワークはtornadoくらい
「何か」動かすと言っても、素で書いたやつで動かしたって、きょうび意味ないのでWebフレームワークの系統をアレコレ見てみたけど、Zope, Django, Pylons, Werkzeugあたりが全滅状態。 (ここ見るとよい http://python3wos.appspot.com/)
tornadoが動くっぽい所までは見た。全部の機能を動かしたわけではないけど、もともと小さいフレームワークだし対応が早かったんだろうなあ。
逆に言うと重量級のフレームワークが移植されるのは時間がかかること必至なので、マイクロフレームワーク全盛期がPython3の時代になっても続くのかもしれん。
そういう意味ではチュートリアル本もPython3ベースに移行しつつあるけど、なにか作ってみましょうというところで有名どころのフレームワークを使えない状況が続くとなると、兎も角も現時点で使えるフレームワークで書くことになると思うので「ZopeからPythonに入りました」とか「DjangoからPythonを始めました」なんていうクラスタが無くなって、tornadoとか、まだ見ぬマイクロフレームワークとかからPythonに入ってくる人が増えるのかねえ。
増えるわきゃないか。RubyはRailsが1.9で動くようになっているので、ZopeとかDjangoとかが動かないっていう所で、Pythonista人口の今後の変動に影響があるかもね。

5. Jinja2, SQLAlchemyはいける、IPythonがないのが地味につらい
足回りのライブラリは徐々に対応が進んでる感じだった。pytz, Jinja2, SQLAlchemyあたりが動くのは単純にうれしい。
IPythonが動かないので、素のインタプリタを1日使ったのだけれど、例外吐いたりしたときに調べるのが大変だったり、help見るのが面倒だったりして地味につらかった。IPythonは早くPy3k移行が進んでほしい。

6. SQLAlchemyからMySQLに繋がらない
これがトドメ。2-3個ドライバを変えて試したけど全部例外に落ちてしまった。ここ見るといくつか通るはずなんだけどね。statementにstrを期待されているところで、なぜかbytesになっていたり、bytearrayになっていたりで変数置換落ちする。
"Py3k ready"となっていても、実際には3.1までで、3.2じゃ動かなかったりとかそういうのなのか。

という感じで、作業環境をPython3に移行可能かという調べ物は、4時間ほどで頓挫。
失敗した記録として残しておく。