pypyでZODBを動かそうとした

はろーえぶりわん

pypyをはじめようとしてそのまま日がたち、アドベントカレンダーで一念発起してpypyをいじっているaodagです。

さて、アドベントカレンダーが回ってきましたが、ほかのみんなのようなpypyで処理系を!ということはあんまり考えてないわけです。

pypyがcpythonよりも速いと聞いてきました!

さてpypyはpyramidですでに公式サポートしているので、まあpypy使えますよねというところですが、ZODBが動かないわけです。

動かないので、動かすためにあがいてみました。(まだちゃんと動かせていません。)

まずはこちらのmlポストを見て欲しい

https://mail.zope.org/pipermail/zodb-dev/2011-September/014364.html

手順が書いてあります。

ということでそのままやってみます。

>>>> storage = FileStorage('data1.fs')
>>>> from ZODB.DB import DB
>>>> db = DB(storage)
>>>> conn = db.open()
>>>> root = conn.root()
>>>> root
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/aodag/Envs/pypypy/lib-python/modified-2.7/UserDict.py", line 15, in __repr__
    def __repr__(self): return repr(self.data)
  File "/home/aodag/Envs/pypypy/site-packages/persistent/mapping.py", line 30, in __get__
    return self.func(inst)
  File "/home/aodag/Envs/pypypy/site-packages/persistent/mapping.py", line 99, in data
    data = self.__dict__.pop('_container')
KeyError: '_container'

だめでした(´・ω・`)

でもこれってpypyだからだめなの?

ひょっとして、このブランチがだめなんじゃないの?

ということで、このブランチをcpythonで試してみました。

まずはパッチなしの場合。

python2.6では動きます。

python2.7でも動きました。

さて、パッチ適用後です。

python2.7で動きました。

pypyのバージョンが関係しているかもしれませんが、このあたりで心折れたので(日付変わっちゃってるし(´・ω・`) )ZODB動かす夢はまた情報が入ったら試すことにします。

残念な結果になりましたが、ひとまずアデュー。