你如何让PyPy,Django和PostgreSQL一起工作?

问题:

PyPy,Django和PostgreSQL可以搭配什么叉或组合使用吗?
我知道PyPy和Django在一起玩得很好,但是我不太确定PyPy和PostgreSQL。我确实看到,亚历克斯·盖诺(Alex Gaynor)已经做了一个名为pypy-postgresql的PyPy的分支。我也知道有人正在使用psycopg2-ctypes
这些叉子有区别吗?还是应该使用稳定的1.9 PyPy并使用psycopg2-ctypes?使用ctypes选项可能会影响性能,请参阅下面的评论。
另外,有没有人使用PyPy与pyscopg2有任何陷阱?如果某些工作不正常,似乎很容易回到CPython,但是大多数情况下,我正在寻找一个程序员提前准备的事情。
我环顾四周,似乎psycopg2本身与PyPy一起工作。虽然psycopg2-ctypes似乎对某些人来说是有效的,但有一个关于pypy-dev的讨论。我在Windows上工作,我不认为psycopg2-ctypes已经准备好了Windows,可悲的是。

回答:

psycopg2cffi(2015年更新)

 psycopg2cffi是另一个psycopg2兼容的替代品,应该提供与PyPy最好的PostgreSQL性能。将其添加到您的settings.py以保持兼容:

try:
    import psycopg2
except ImportError:
    # Fall back to psycopg2cffi
    from psycopg2cffi import compat
    compat.register()

psycopg2-ctypes(2012)

我也知道有些人正在使用psycopg2-ctypes。

这是最简单的方法要保持兼容两者,只需将这段代码添加到你的Django settings.py

try:
    import psycopg2
except ImportError:
    # Fall back to psycopg2-ctypes
    from psycopg2ct import compat
    compat.register()

我在几个版本之前测试过这个;不幸的是,在我的经验中,psycopg2-ctypes否定了PyPy提供的小型性能提升。但YMMV,这取决于JIT对您的代码的一般性以及您实际花费的Python代码的几分钟时间。而且PyPy也可以从那以后改善。

我不认为psycopg2-ctypes已经准备好了Windows

我没有尝试过,但ctypes是与平台无关的。 AFAICT您只需要确保libpq.dll库可加载(位于PATH环境变量或本地目录中的目录中),它就像在Linux中一样适用于Windows。

pypy-的PostgreSQL

我确实看到,Alex Gaynor已经将PyPy的一个分支称为pypy-postgresql。

长远来看,这不是一个好选择。该分支机构尚未更新一年以上,但我尝试建立该分支机构失败。无论如何,在解释器中硬编码PostgreSQL驱动程序似乎是错误的。
我相信还有pypy-postgresql的二进制文件,所以如果你想使用它,你需要自己构建整个PyPy分支。不是为了微弱的心脏:它需要几十分钟和一个至少4 GB的内存的机器。 (官方说明:http://pypy.org/download.html#building-from-source
要建立,你首先需要源。如果你安装了Mercurial,你可以简单地hg clone https://bitbucket.org/alex_gaynor/pypy-postgresql。如果没有,您可以下载自动“提示”zip文件:https://bitbucket.org/alex_gaynor/pypy-postgresql/get/tip.zip
打开命令行,进入解压缩的目录,然后在pypy/translator/goal
如果您已安装PyPy,建议使用它来构建:

pypy translate.py -Ojit

除此以外:

python translate.py -Ojit

可悲的是,这是我的知识结束的地方。我收到错误“BytecodeCorruption: unimplemented opcode, ofs=234, code=203, name=BUILD_LIST_FROM_ARG

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: How do you get PyPy, Django and PostgreSQL to work together?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

2 + 4 =