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

应该使用什么分支或者组合来使PyPy,Django和PostgreSQL在一起玩呢?

我知道PyPy和Django在一起玩的很好,但我不太确定PyPy和PostgreSQL。 我确实看到Alex Gaynor做了一个名为pypy-postgresql的PyPy 分支 。 我也知道有些人使用psycopg2-ctypes 。

这些叉子有没有区别? 还是应该使用稳定的1.9 PyPy并使用psycopg2-ctypes? 使用ctypes选项可能会损害性能,请参阅下面的注释。

另外,有没有人遇到与pyscopg2使用PyPy的任何陷阱? 如果某些东西不能正常工作,看起来很容易,但是大多数情况下,我正在寻找一个程序员可以提前做的准备工作。

我环顾四周,似乎psycopg2与PyPy原生地工作。 尽pipepsycopg2-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() 

我在几个版本之前testing了这个; 不幸的是,根据我的经验,psycopg2-ctypes否定了PyPy提供的小的性能收益。 但是YMMV,这取决于你的代码是如何对JIT友好的,以及你实际上花费了多less时间来运行Python代码。 也许PyPy从那以后才有所改进。

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

我还没有尝试过,但ctypes是平台无关的。 AFAICT你只需要确保libpq.dll库是可加载的(位于PATH环境variables或本地目录中的一个目录中),并且它应该像在Linux中一样工作在Windows上。

pypy-的PostgreSQL

我确实看到Alex Gaynor制作了一个名为pypy-postgresql的PyPy分支。

我不认为这是一个长期的好select。 这个分支已经有一年多的时间没有更新了,我试图build立它的尝试失败了。 在解释器中硬编码PostgreSQL驱动程序似乎是错误的。

我相信pypy-postgresql中没有二进制文件,所以如果你想使用它,你需要自己构build整个PyPy分支。 不是因为心脏不够:它需要几十分钟的时间和一台至less有4GB内存的机器。 (官方说明: http : //pypy.org/download.html#building-from-source )

要build立起来,你首先需要源代码。 如果你安装了Mercurial,你可以简单地使用hg clone https://bitbucket.org/alex_gaynor/pypy-postgresql 。 如果没有,你可以下载automagic的“提示”压缩文件: https : //bitbucket.org/alex_gaynor/pypy-postgresql/get/tip.zip

打开一个命令行,进入解压目录,然后在里面的pypy/translator/goal

如果你安装了PyPy,build议使用它来构build:

 pypy translate.py -Ojit 

除此以外:

 python translate.py -Ojit 

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

一些额外的资源:

  • PyPy兼容性信息: 数据库适配器
  • Python wiki上的PostgreSQL页面
  • Konstantin Lopuhin的psycopg2cffi
    基于cffi的PyPy 2.0和更新的psycopg2实现
    ( 博客文章 , GitHub回购 , PyPI页面 , pypy-dev线程 )
    – 这看起来像目前最强的候选人,但我还没有testing过
  • Michael van Tellingen的psycopg2ct
    PyPy 1.6和更新的基于ctypes的psycopg2的实现
    ( GitHub回购 , PyPI页面 )
  • Alex Gaynor的pypy-postgresql
    弃用RPython的psycopg2端口实现为PyPy的一个分支( Bitbucket回购 )
  • pypq
    “使用ctypes和libpq.so的Python PostgreSQL DBAPI 2.0兼容驱动程序,适用于PyPy”
    ( 讨论 , PyPI页面 )
  • bpgsql
    “Barebones纯python PostGreSQL客户端。大部分DB-API 2.0(PEP 249)兼容。包括一个实验性的Django 1.0后端”
    ( 讨论 , 网页 , 谷歌代码页 )
  • pg8000
    “PostgreSQL数据库引擎的DB-API 2.0兼容Pure-Python接口不依赖任何外部库(如编译的python模块或PostgreSQL的libpq库)”
    ( 网页 , GitHub回购 , PyPI页面 )