PyPy + Storm ORM无法正常工作(cpyext问题)

时间:2014-03-30 00:28:59

标签: python pypy storm-orm

作为最近开始的项目的一部分,以下是我们正在使用的虚拟环境的配置:

PyPy 2.2.1
Mysql-python 1.2.5
Storm orm 0.20
PyPy和Storm基本上是我们被告知不要改变的一些要求。但是,在一个非常小的测试中,我们遇到了Storm ORM的问题。所以,在我们的代码中尝试非常简单的事情:

...
users = store.find(User)
for u in users:
    print u.fullname
...

在控制台中产生以下错误:

...
Fatal error in cpyext, CPython compatibility layer, calling PyTuple_New
Either report a bug or consider not using this particular extension
<StackOverflow object at 0x1c7c1a8>
RPython traceback:
  File "pypy_module_cpyext_api.c", line 35143, in PyTuple_New
  File "pypy_module_cpyext_pyobject.c", line 547, in make_ref
  File "pypy_module_cpyext_pyobject.c", line 1387, in create_ref
  File "rpython_rlib_rstack.c", line 65, in stack_check_slowpath

认为连接器是问题,我们尝试使用PyMySQL(它是MySQLdb的替代品),我们遇到了同样的问题。 然后,我们安装了SQLAlchemy,它运行得很完美,所以看起来问题就是Storm。

那么,任何人都知道如何使Storm ORM在PyPy环境中工作?

1 个答案:

答案 0 :(得分:2)

好的,经过更多的调查,似乎有一种方法可以在PyPy上使用Storm。从https://github.com/DamnWidget/mamba/blob/master/mamba/init.py开始,基本上,将其添加到我的代码中就可以了:

import sys
if '__pypy__' in sys.modules:
    # we are running on PyPy interpreter make sure we don't use the
    # Storm C extensions that make PyPy cpyext crash
    import os
    os.environ.update({'STORM_CEXTENSIONS': '0'})
这样,我在其他测试中没有遇到任何问题。

希望这能帮助处于相同情况的任何人。