¿Qué bifurcación o combinación de paquetes debería uno usar para hacer que PyPy, Django y PostgreSQL funcionen bien juntos?
Sé que PyPy y Django funcionan bien juntos, pero estoy menos seguro acerca de PyPy y PostgreSQL. Veo que Alex Gaynor ha creado una bifurcación de PyPy llamada pypy-postgresql . También sé que algunas personas utilizan psycopg2-ctypes .
¿Hay alguna diferencia entre estas horquillas? ¿O deberíamos usar el PyPy 1.9 estable y usar psycopg2-ctypes? El uso de las opciones de ctypes podría afectar el rendimiento, consulte el comentario a continuación.
Además, ¿alguien ha experimentado algún problema al usar PyPy con pyscopg2? Parece bastante fácil recurrir a CPython si algo no funciona bien, pero sobre todo estoy buscando cosas que un programador pueda hacer antes de tiempo para prepararse.
Miré a mi alrededor, no parece que psycopg2 funcione de forma nativa con PyPy. Aunque, psycopg2-ctypes parece estar funcionando para algunas personas, hubo una discusión sobre pypy-dev . Trabajo en Windows y, lamentablemente, no creo que psycopg2-ctypes esté listo para Windows todavía.
Respuestas:
psycopg2cffi (actualizado en 2015)
psycopg2cffi es otro reemplazo compatible con psycopg2 y debería proporcionar el mejor rendimiento de PostgreSQL con PyPy. Agregue esto a su
settings.py
para seguir siendo compatible con ambos:psycopg2-ctypes (2012)
Esta es la manera más fácil; para seguir siendo compatible con ambos, simplemente agregue este código en su Django
settings.py
:Probé esto hace algunos lanzamientos; lamentablemente, en mi experiencia, psycopg2-ctypes niega las pequeñas ganancias de rendimiento que ofrece PyPy. Pero YMMV, depende de qué tan compatible con JIT sea su código en general y de la fracción de tiempo que dedique realmente a ejecutar código Python. Y tal vez PyPy haya mejorado desde entonces.
No lo he probado, pero ctypes es independiente de la plataforma. AFAICT, solo tiene que asegurarse de que la
libpq.dll
biblioteca sea cargable (ubicada en un directorio en su variable de entorno PATH o directorio local) y debería funcionar en Windows como en Linux.pypy-postgresql
No creo que esta sea una buena opción a largo plazo. La sucursal no se ha actualizado durante más de un año y mis intentos de construirla han fallado. Y parece incorrecto codificar un controlador PostgreSQL en el intérprete de todos modos.
Creo que tampoco hay binarios de pypy-postgresql, por lo que si desea usarlo, deberá compilar toda la rama de PyPy usted mismo. No para los débiles de corazón: se necesitan decenas de minutos y una máquina con al menos 4 GB de memoria. (Instrucciones oficiales: http://pypy.org/download.html#building-from-source )
Para construir, primero necesita la fuente. Si tiene Mercurial instalado, simplemente puede
hg clone https://bitbucket.org/alex_gaynor/pypy-postgresql
. De lo contrario, puede descargar el archivo zip "tip" de automagic: https://bitbucket.org/alex_gaynor/pypy-postgresql/get/tip.zipAbra una línea de comando, vaya al directorio descomprimido y luego dentro
pypy/translator/goal
Si tiene PyPy instalado, se recomienda usarlo para compilar:
De otra manera:
Lamentablemente, aquí es donde termina mi conocimiento. Me sale el error "
BytecodeCorruption: unimplemented opcode, ofs=234, code=203, name=BUILD_LIST_FROM_ARG
"fuente
Algunos recursos adicionales:
implementación basada en cffi de psycopg2 para PyPy 2.0 y versiones posteriores
( publicación de blog , repositorio de GitHub , página de PyPI , hilo de pypy-dev )
: este parece el candidato más sólido actualmente, pero aún no lo he probado
implementación basada en ctypes de psycopg2 para PyPy 1.6 y versiones posteriores
( repositorio de GitHub , página de PyPI )
puerto RPython abandonado de psycopg2 implementado como una bifurcación de PyPy ( repositorio de Bitbucket )
"Controlador compatible con Python PostgreSQL DBAPI 2.0 que usa ctypes y libpq.so, funciona con PyPy"
( discusión , página de PyPI )
"Cliente PostGreSQL de Python puro de Barebones. En su mayoría compatible con DB-API 2.0 (PEP 249). Incluye un backend experimental de Django 1.0"
( debate , página web , página de códigos de Google )
"una interfaz Pure-Python compatible con DB-API 2.0 para el motor de base de datos de PostgreSQL [...] no depende de ninguna biblioteca externa (como un módulo de Python compilado o la biblioteca libpq de PostgreSQL)"
( página web , repositorio de GitHub , Página PyPI )
fuente