你如何让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页面 )